MySQL组由TimeStamp提供

时间:2014-01-14 22:06:45

标签: mysql

我正在编写一个Python代码,我需要使用MySQLdb从MySQL数据库中检索数据。原始数据库的一部分如下所示:

我使用了这个命令

SELECT TimeStamp,Pac 
FROM SolarData 
WHERE DATE(`TimeStamp`) = CURDATE() 
GROUP BY HOUR(TimeStamp);

按小时对数据进行分组,但结果不符合我的预期:

每小时显示的Pac号与每小时的第一条记录的号码相同。这不是整个小时的累积数。我需要的是整个小时的累积数量。

2 个答案:

答案 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;