Mysql 基于时差添加行的sql查询

Mysql 基于时差添加行的sql查询,mysql,datetime,time,Mysql,Datetime,Time,我有一个表,有以下列:s.no,house_no,energy,time 我想找出每一间房子每一小时的总能量。 表: 我尝试的是上午10点到11点。但是这个查询也会对时间值大于上午11点的行的能量求和 SELECT house_no, sum( energy ) AS sum, time FROM main GROUP BY house_no HAVING ( TIMESTAMPDIFF( MINUTE , time, '2014-10-20 11:00:00' ) >0) 结果是: +

我有一个表,有以下列:s.no,house_no,energy,time 我想找出每一间房子每一小时的总能量。 表:

我尝试的是上午10点到11点。但是这个查询也会对时间值大于上午11点的行的能量求和

SELECT house_no, sum( energy ) AS sum, time
FROM main
GROUP BY house_no
HAVING (
TIMESTAMPDIFF(
MINUTE , time, '2014-10-20 11:00:00' ) >0)
结果是:

+----------+------+---------------------+
| house_no | sum  | time                |
+----------+------+---------------------+
|        1 |   18 | 2014-10-20 10:00:00 |
|        2 |   27 | 2014-10-20 10:00:00 |
+----------+------+---------------------+
但实际答案应该是:

+----------+------+---------------------+
| house_no | sum  | time                |
+----------+------+---------------------+
|        1 |   15 | 2014-10-20 10:00:00 |
|        2 |   7 | 2014-10-20 10:00:00 |
+----------+------+---------------------+

您还必须根据小时对时间进行分组

SELECT house_no, sum( energy ) AS sum, time
FROM main
GROUP BY house_no,DATE_FORMAT(time,'%d %b %Y %H')
HAVING (
TIMESTAMPDIFF(
MINUTE , time, '2014-10-20 11:00:00' ) >0)

是的,它是有效的。使用where子句而不是HAVE子句本身解决了这个问题。
SELECT house_no, sum( energy ) AS sum, time
FROM main
GROUP BY house_no,DATE_FORMAT(time,'%d %b %Y %H')
HAVING (
TIMESTAMPDIFF(
MINUTE , time, '2014-10-20 11:00:00' ) >0)