2012-09-10 185 views
3

我有一個MySQL問題。我需要在兩個特定時間之間來自MySQL的平均數據。在給定時間內每5分鐘的平均數據量

對於這一點,我使用:

select avg(Column) 
from Databasename.tablename 
where datetime BETWEEN '2012-09-08 00:00:00' AND '2012-09-08 15:30:00' 

現在,我需要的是數據的每5分鐘的平均值,在給定的時間。通過使用:

select avg(Column) 
from Databasename.Tablename 
where datetime BETWEEN '2012-09-08 15:00:00' 
        AND '2012-09-08 15:30:00' + 'INTERVAL 5minutes' 

它沒有顯示任何錯誤,但顯示NULL

如何在兩個特定時間段內每5分鐘獲取一次數據?

+0

有沒有聽說過段落? –

+0

另請參閱:http://stackoverflow.com/questions/3086386/select-group-by-segments-of-time-10-seconds-30-seconds-etc/40584023#40584023 – Wera

回答

11

組間間隔

您應該使用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將無法​​正常工作,得到的數字可能代表了每一個小時的最後一個區間無效的日期。

+0

Thankyou,我需要減去數據在兩個特定時間之間,每5分鐘一次,然後取平均值。 – user1659213

+0

@ user1659213,以什麼方式減去?如果你想要一個時間的值* a *和另一個時間* b *它是* a * + 5分鐘,並且你想計算與相應的行的差別,那麼你需要將表與自己結合起來。然而,由於你原來的問題沒有提到任何減法,我會說這是一個新問題。 – MvG

+0

我需要在兩個特定時間之間減去數據,每5分鐘一次,然後平均5分鐘數據。我現在正在做的是: 選擇(AVG(列名)),轉換((分(日期時間)DIV 500)* 500,日期時間)+間隔5分鐘作爲endOfInterval 從Databasename.Tablename 地方的datetime「之間2012- 09-12 10:50:00'AND'2012-09-12 14:50:00' group by datetime div 500; 這是累計平均值。假設我在11點500點,700點在11.05點,我平均需要的是(700-500)/ 5 = 40。但是現在我得到了(500 + 700)/ 5 = 240.我不需要累計平均值。請幫助我。 – user1659213

相關問題