2011-11-15 52 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。