我有一個天氣數據庫,每隔70秒就會獲取數據集(取決於天氣站何時傳遞數據)。
我想使用Pchart來繪製它,但我有太多的樣本,所以X軸被搞砸了。
所以我想每5分鐘的數據。 (或每30分鐘)
查詢我目前有是這樣的:MySQL:選擇查詢,5分鐘遞增
SELECT time, temp_out FROM wmr200 WHERE date(time) = curdate()
這得到了樣品過去24個小時,但有太多。
我有一個天氣數據庫,每隔70秒就會獲取數據集(取決於天氣站何時傳遞數據)。
我想使用Pchart來繪製它,但我有太多的樣本,所以X軸被搞砸了。
所以我想每5分鐘的數據。 (或每30分鐘)
查詢我目前有是這樣的:MySQL:選擇查詢,5分鐘遞增
SELECT time, temp_out FROM wmr200 WHERE date(time) = curdate()
這得到了樣品過去24個小時,但有太多。
下面將讓你由任何數據與時間戳一個樣本:00:05,:10 ...
SELECT time, temp_out FROM wmr200 WHERE date(time) = curdate()
AND mod(minute(time),5) = 0
我使用模函數來檢查分鐘部分時間是(0或)整除5
如果你需要爲每個時間段只有一個結果,我們必須變得更加複雜了不少。
SELECT concat(date(time),' ',hour(time),':',round(minute(time)/5,0)*5),
min(temp_out), avg(temp_out), max(temp_out)
FROM wmr200
GROUP BY date(time), hour(time), round(minute(time)/5,0)*5
我沒有權限訪問MySQL實例來測試它,但這裏有個想法。它按每五分鐘分組,按日期,小時和round(minute(time)/5,0)*5
分組 - 分鐘到最近5分鐘。
它選擇它應該分組的時間值,以及min,avg和max temp_out,因爲我不確定哪些最適合您的情況。
但是,如果您的數據庫沒有5分鐘延伸數據(或30分鐘延伸數據,如果這是您正在使用的數據),它仍然可能沒有針對採樣點的數據。
萬一有人在這個頁面上發生任何事情,這裏的解決方案可以與Sam's相媲美。它利用Unix時間戳和整數除法在任意時間段內對數據進行「分箱」並取平均值。
SELECT FROM_UNIXTIME((UNIX_TIMESTAMP(time) div (5*60))*(5*60)+(5*60)) as timeIntervals,
round(avg(temp_out),3) as temp_out
FROM wmr200
GROUP BY 1
我改成了這樣: 選擇時間,temp_out FROM wmr200 WHERE日期(時間)= CURDATE() 和MOD(分鐘(時間),30)= 0 但一些樣品似乎錯過了,或者我得到重複。 由於數據沒有被存儲在一個穩定的PASE .. – HyperDevil
輸出示例: '2012-05-01 0點00分十八秒\t 4.4 2012-05-01 0點30分51秒\t 4.4 2012-05-01 01:00:01 \t 4.3 2012-05-01 01:00:50 \t 4.3' – HyperDevil
@HyperDevil我編輯了一個可能的解決方案。我無法測試它,所以讓我知道它是如何工作的。 –