組間間隔
您應該使用group by
創建一個組,以便在您要平均每個區間。
select avg(Column), convert((min(datetime) div 500)*500 + 230, datetime) as time
from Databasename.tablename
where datetime BETWEEN '2012-09-08 00:00:00' AND '2012-09-08 15:30:00'
group by datetime div 500
這利用以下事實:一個日期和時間可以隱含被轉換爲一個數字,那麼這將是格式YYMMDDhhmmss
的。將這樣的數字除以100秒,同樣除以500,每隔5分鐘產生一個唯一的數字。
我選擇的附加列將給出間隔的中間值:任何時間間隔(這裏選擇最小值,但它並不重要),轉換爲5分鐘間隔數,返回到日期 - 時間編號,然後再加兩分半鐘。您可以使用類似的語法來計算間隔的開始(只需保留+ 230
)或(包括)結束(+ 459
)。
使用sqlfiddle進行測試。
的範圍內處理
請注意,您BETWEEN
範圍將包括來自15:30:00
行,但沒有從區間別人月底開始在那個時候。也許你要排除的範圍的結束從您的選擇:
where datetime >= '2012-09-08 00:00:00' AND datetime < '2012-09-08 15:30:00'
爲什麼你NULL
至於爲什麼你的查詢產生NULL
:做區間算術,你不封閉整個區間用引號括起來的事情,並且你用時間單位的單數名稱。即
'2012-09-08 15:30:00' + INTERVAL 5 minute
但這隻會將範圍擴展到2012-09-08 15:35:00
,但仍不能創造你想要那5分鐘的間隔。你寫它的方式,你試圖添加兩個字符串,這是不可能在MySQL中,除非字符串可以轉換爲數字,在這種情況下,這些數字將被添加。
您可能想要使用區間算法來計算區間的獨佔結束,即第一第二後間隔:
convert((min(datetime) div 500)*500, datetime) + INTERVAL 5 minute as endOfInterval
簡單地增加500
而不是我的查詢230
將無法正常工作,得到的數字可能代表了每一個小時的最後一個區間無效的日期。
來源
2012-09-10 05:24:47
MvG
有沒有聽說過段落? –
另請參閱:http://stackoverflow.com/questions/3086386/select-group-by-segments-of-time-10-seconds-30-seconds-etc/40584023#40584023 – Wera