我正在编写一个Python代码,我需要使用MySQLdb从MySQL数据库中检索数据。原始数据库的一部分如下所示:
我使用了这个命令
SELECT TimeStamp,Pac
FROM SolarData
WHERE DATE(`TimeStamp`) = CURDATE()
GROUP BY HOUR(TimeStamp);
按小时对数据进行分组,但结果不符合我的预期:
每小时显示的Pac号与每小时的第一条记录的号码相同。这不是整个小时的累积数。我需要的是整个小时的累积数量。
答案 0 :(得分:5)
这是因为当你不使用ANSI标准的GROUP BY
时,MySQL就像你的酒鬼叔叔。你可能想要:
SELECT HOUR(TimeStamp) AS Hour,
SUM(Pac) AS Pac
FROM SolarData
WHERE `TimeStamp` >= CURDATE()
AND `TimeStamp` < CURDATE() + INTERVAL 1 DAY
GROUP BY HOUR(TimeStamp);
看到您想要的结果会很有帮助。在此之前,上述查询只是基于按小时对数据进行分组的猜测。为了将来参考,请使用SQL Fiddle发布表结构/数据。
答案 1 :(得分:1)
“我如何装饰代码,以便小时格式可以包含日期,例如2014-01-14 07:00”
所有Hour
属于今天(CURDATE()
),第二部分始终为':00',因此以下查询可能会对您有所帮助。可以尝试一下吗?
SELECT CONCAT(CURDATE(), ' ', Hour, ':00'), Pac
FROM (
SELECT HOUR(TimeStamp) AS Hour,
SUM(Pac) AS Pac
FROM SolarData
WHERE DATE(`TimeStamp`) = CURDATE()
GROUP BY HOUR(TimeStamp)
) x;