2013-10-10 60 views
2

我想使用highcharts來查看上一小時的溫度行爲。時區問題使用mysql中最後一小時的平均值的簡單溫度趨勢

我每小時記錄20到30個溫度值。 在這裏,我想在最後一小時提取4到6個平均值(10或15分鐘期間的一個值)並繪製它們。也許我會將其改爲3個值(一個20分鐘)以獲得更平滑的東西。

我有這樣的值(例如):

mysql> SELECT date,valeur FROM temperature 
+---------------------+--------+ 
| date    | valeur | 
+---------------------+--------+ 
| 2013-09-26 11:30:40 | 25.2 | 
| 2013-09-26 11:33:19 | 25.4 | 
| 2013-09-26 11:34:12 | 25.5 | 
| 2013-09-26 11:38:37 | 25.4 | 
| 2013-09-26 11:39:30 | 25.4 | 
| 2013-09-26 11:40:23 | 25.4 | 
| 2013-09-26 11:43:02 | 25.4 | 
| 2013-09-26 11:45:41 | 25.3 | 
| 2013-09-26 11:47:33 | 25.3 | 
| 2013-09-26 11:51:07 | 25.4 | 
| 2013-09-26 11:51:52 | 25.3 | 
... 

我試圖用這個命令解壓:

SELECT ROUND(UNIX_TIMESTAMP(date)/(15 * 60)) AS timekey, ROUND(AVG(valeur),1) AS a FROM temperature WHERE date >= (now() - INTERVAL 1 HOUR) GROUP BY timekey ORDER BY DATE; 

但我沒有得到任何輸出。如果我將時間間隔更改爲5小時,則獲得16個值:

[1534861, 24.600000] 
[1534862, 24.600000] 
[1534863, 24.600000] 
[1534864, 24.700000] 
[1534865, 24.700000] 
[1534866, 24.600000] 
[1534867, 24.600000] 
[1534868, 24.600000] 
[1534869, 24.600000] 
[1534870, 24.600000] 
[1534871, 24.700000] 
[1534872, 24.700000] 
[1534873, 24.700000] 
[1534874, 24.800000] 
[1534875, 25.000000] 
[1534876, 25.200000] 

任何想法如何更正此mysql請求?

感謝大家

格雷格

編輯 - 看到選擇的答案:該代碼是好的,但時區不!

回答

0

我猜你的問題很可能是1小時的時區差異。

如果您在過去一小時內沒有獲得任何值,但是在過去5小時內得到了16個(構成了4小時值),這聽起來像您在過去一小時內沒有任何值。如果你確定你做的,檢查數據與時區的時區()

嘗試使用sysdate也許。手冊引用:

此外,SET TIMESTAMP語句影響NOW()返回的值,但不影響由SYSDATE()返回的值 。這意味着 二進制日誌中的時間戳設置對SYSDATE()的調用沒有影響。將 時間戳設置爲非零值會導致NOW()每次後續調用都會返回該值( )。將時間戳設置爲零將取消此效果,以便NOW()再次返回當前日期和時間。

有關兩個函數之間差異的更多信息,請參閱有關SYSDATE()的說明。

+0

你是對的。使用SET time_zone ='非洲/布拉柴維爾';它完美的作品!這解釋了這種奇怪的行爲,從最後一小時失蹤的其他查詢中得知。非常感謝您的回答! – iero

+0

NP與使用不同TZs的服務器一起工作時的常見問題 – AdrianBR

0

這應該工作(注意:floor()使用):

SELECT from_unixtime(floor(unix_timestamp(date)/15 * 60) * 15 * 60) AS tstamp, 
    round(avg(valeur),1) AS a 
FROM temperature 
WHERE date >= (now() - INTERVAL 1 HOUR) 
GROUP BY 1 
ORDER BY 1 
+0

round vs floor僅僅決定在上面或下面的一個分鐘內的哪個間隔。它沒有考慮到失蹤時間(4 * 15分鐘的時間間隔) – AdrianBR