2014-10-29 56 views
0

選項(我的表)SQL查詢來平均能量,每15分鐘

id  datetime   energy 
1 2014-10-28 04:00:00  14  
1 2014-10-28 04:05:00  16 
1 2014-10-28 04:10:00  23 
1 2014-10-28 04:15:00  45 
1 2014-10-29 04:00:00  34 
1 2014-10-29 04:05:00  33 
1 2014-10-29 04:10:00  12 
1 2014-10-29 04:15:00  67 

輸出

id datetime 
1  2014-10-28 04:15:00 28 
1  2014-10-29 04:15:00 37.33 

我的查詢:

SELECT date(`datetime`) dateDay,id, 
15*floor(date_format(`datetime`,'%i')/15) dateHour, 
avg(energy) FROM `meter` 
WHERE `datetime` >= '2014-10-28 00:00:01' AND `datetime` <= '2014-10-29 23:59:59' 
GROUP BY id,day(datetime),month(datetime),dateHour 
+2

你可以建立你的例子在SQL小提琴?這將使它更清晰。 http://www.sqlfiddle.com/ – mika 2014-10-29 07:47:50

+0

你的問題到底是什麼? – 2014-10-29 07:51:16

+0

你知道04:00:00到04:15:00有15​​ * 60 + 1秒,你不能在15分鐘內把它們都放進去。 – 2014-10-29 08:01:54

回答

-1

如果我明白了,你想達到一個按15分鐘間隔分組。如果是的話,你會相處是這樣的:

SELECT 
    id, 
    avg(energy) as average_value, 
    date_format(datetime, "%Y-m-d") as date_day, 
    date_format(datetime,'%H') as date_hour 
    IF(date_format(datetime,'%i') < 15, 0, 
    IF(date_format(datetime,'%i') <= 30, 15, 
    IF(date_format(datetime,'%i') <= 45, 30,45))) as fifteen_minutes_slot 
from deliverydestination 
GROUP BY id, date_day, date_hour, fifteen_minutes_slot 

1)用組IF計算fifteen_minutes插槽:如果分鐘值小於15,給它的值爲0,否則,如果它小於30,給它的值爲15等等。

2)按日,小時和15分組劃分時隙值。如果需要的話,通過身份證,如你的例子。

這將是很好,有一個小提琴與您的數據,以顯示最終結果...

+0

您的方法將獲得與OP相同的結果。 OP的方法非常簡單。 http://sqlfiddle.com/#!2/c3004/9 – 2014-10-29 08:22:11

+0

哼哼......這是真的。 「15 *樓(date_format('datetime','%i')/ 15)」很好地完成了這項工作。那麼問題是什麼? – mika 2014-10-29 08:34:02

+0

@Jaugar Chang BTW:「輸出」中缺少「15分鐘插槽」。這將有助於閱讀查詢。謝謝你的小提琴。 – mika 2014-10-29 08:38:42