我在尝试以适当的格式获取数据库的数据时遇到了很多问题。 我正在寻找按天打印数据库输出的方法。
我的数据库有两列,一列的格式为timestamp
,格式为YYYY-MM-DD H:M
,另一列的格式与速度相关。
我需要按天拆分速度数据。
或多或少,我的数据库是这样的(每天有288个数据):
Timestamp | Speed
2014-05-01 00:03:00 | 328.71
2014-05-01 00:18:00 | 331.31
2014-05-01 00:33:00 | 193.83
2014-05-02 00:03:00 | 321.21
2014-05-02 00:18:00 | 290.39
2014-05-02 00:33:00 | 283.43
我正在寻找的是:
Hour | 2014-05-01 | 2014-05-02
00:03:00 | 328.71 | 321.21
00:18:00 | 331.31 | 290.39
00:33:00 | 193.83 | 283.43
首先,我试图以静态的方式做,但是当我得到它时,我会动态。
我所提出的查询是
SELECT
(CASE WHEN Timestamp>='2014-05-01' AND Timestamp<='2014-05-03'
THEN date_format(Timestamp,'%H:%i') ELSE 0 END) AS 'Hour',
(CASE WHEN Timestamp>='2014-05-01' AND Timestamp<='2014-05-02'
THEN speed ELSE 0 END) AS '2014-05-01',
(CASE WHEN Timestamp>='2014-05-02' AND Timestamp<='2014-05-03'
THEN velocidad ELSE 0 END) AS '2014-05-02'
FROM `db_speed`
WHERE Timestamp>='2014-05-01' AND Timestamp<='2014-05-10
通过这个查询,我得到一个这样的结构:
Hour | 2014-05-01 | 2014-05-02
00:03:00 | 328.71 | 0
00:18:00 | 331.31 | 0
00:33:00 | 193.83 | 0
00:03:00 | 0 | 321.21
00:18:00 | 0 | 290.39
00:33:00 | 0 | 283.43
答案 0 :(得分:1)
你非常接近,你只是缺少group by
和聚合功能。
SELECT
(CASE WHEN Timestamp>='2014-05-01' AND Timestamp<='2014-05-03'
THEN date_format(Timestamp,'%H:%i') ELSE 0 END) AS 'Hour',
MAX((CASE WHEN Timestamp>='2014-05-01' AND Timestamp<='2014-05-02'
THEN speed ELSE NULL END)) AS '2014-05-01',
MAX((CASE WHEN Timestamp>='2014-05-02' AND Timestamp<='2014-05-03'
THEN speed ELSE NULL END)) AS '2014-05-02'
FROM `db_speed`
WHERE Timestamp>='2014-05-01' AND Timestamp<='2014-05-10'
GROUP BY `Hour`
答案 1 :(得分:0)
不是你要求的结果表,但这个解决方案可能是更好的选择。 您可以从这样的查询开始,每个时间为每行,然后是逗号分隔的日期和速度列。
select TIME_FORMAT(Timestamp,'%H:%i:%s'),
group_concat(DATE(Timestamp)),
group_concat(speed)
from db_speed GROUP BY MINUTE(Timestamp) ORDER BY Timestamp asc;
得到这样的结果:
TIME GROUP_CONCAT(DATE(TS)) GROUP_CONCAT(SPEED)
00:03:00 2014-05-01,2014-05-02 328.71,321.21
00:18:00 2014-05-01,2014-05-02 331.31,290.39
00:33:00 2014-05-01,2014-05-02 193.83,283.43
在这里演示:http://sqlfiddle.com/#!2/fc340/11/0
然后,使用您选择的语言,您可以将分组的值拆分为数组或地图。