2014-10-20 86 views
0

我有一張表,其中包含以下列:s.no,house_no,energy,time 我想每個小時查找每個房屋的總能量。 表:SQL查詢基於時差添加行

+-----+----------+---------------------+--------+ 
| sno | house_no | time    | energy | 
+-----+----------+---------------------+--------+ 
| 1 |  1 | 2014-10-20 10:00:00 |  5 | 
| 2 |  1 | 2014-10-20 10:30:00 |  10 | 
| 3 |  2 | 2014-10-20 10:00:00 |  7 | 
| 4 |  1 | 2014-10-20 11:01:00 |  3 | 
| 5 |  2 | 2014-10-20 11:00:00 |  20 | 
+-----+----------+---------------------+--------+ 

我試圖爲10-11 am.But此查詢概括,其時間值大於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 | 
+----------+------+---------------------+ 

回答

1

你要組也是基於小時的時間

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) 

DEMO

+0

是的它的工作原理。使用where子句而不是having子句本身解決了這個問題。 – srinivas 2014-10-20 10:00:30