2011-11-15 89 views
2

獲取時間最大值在MySQL

+-------------------+------+ 
| Time    | value| 
+-------------------+------+ 
| 2011-2-1 1:01:00 | 10.1 | 
+-------------------+------+ 
| 2011-2-1 1:03:15 | 7.7 | 
+-------------------+------+ 
| 2011-2-1 1:05:21 | 5.4 | 
+-------------------+------+ 
| 2011-2-1 1:06:00 | 2.3 | 
+-------------------+------+ 
| 2011-2-1 1:09:30 | 4.2 | 
+-------------------+------+ 
| 2011-2-1 1:11:10 | 6.2 | 
+-------------------+------+ 

我想對每5分鐘的最大值。例如,

  • 在第5分鐘,最大值爲10.1

  • 在第二個5分鐘,最大值爲4.2

在另外的,我也要喜歡爲每個最大值獲取相應的「時間」。

非常感謝

回答

0

你的SELECT語句以5個分鐘間隔,需要把所有的時間,然後對值MAX()。

這是關於MySQL的組合時間談判:

http://forums.mysql.com/read.php?20,131939,131955#msg-131955

要做到5分鐘分組,使用round()功能結合unix_timestamp()

五分鐘:

round(unix_timestamp([time_field])/300) 

所以一起,你的選擇可能看起來像這樣(未經測試):

select 
    round(unix_timestamp([time_field])/300) as Time, 
    max(value) as Value 
from 
    [table_name] 
group by 
    round(unix_timestamp([time_field])/300) 
0

這樣做的幾種不同方法。

一個應該工作的大部分時間:

SELECT `Time`,`value` 
FROM (SELECT `Time`,`value` FROM table ORDER BY `value` DESC) t2 
GROUP BY UNIX_TIMESTAMP(`Time`) DIV 300 

這依賴於一個事實是,MySQL通常採找到的第一個行並返回,在該組的光通過。因此,首先按值排序的內部查詢可確保始終首先找到最大值。 (但它不是完全可靠的,因爲mysql優化器最終可能會以不同的方式排列查詢,它不會實際定義應該返回哪一行

如果這不適用於您,請嘗試搜索Max-group -concat trick。