【问题标题】:get time for max value in mySql在 mySql 中获取最大值的时间
【发布时间】:2011-12-29 23:01:40
【问题描述】:
表格
+-------------------+------+
| 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
另外,我还想为每个最大值获取相应的“时间”。
非常感谢
【问题讨论】:
标签:
php
mysql
aggregate-functions
【解决方案1】:
您的 select 语句需要按 5 分钟间隔对所有时间进行分组,然后有一个 max() 值。
这里讲的是 MySQL 中的分组时间:
http://forums.mysql.com/read.php?20,131939,131955#msg-131955
要进行五分钟分组,请将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)
【解决方案2】:
执行此操作的几种不同方法。
大部分时间都应该工作的一个:
SELECT `Time`,`value`
FROM (SELECT `Time`,`value` FROM table ORDER BY `value` DESC) t2
GROUP BY UNIX_TIMESTAMP(`Time`) DIV 300
这依赖于 MySQL 通常选择它找到的第一行并根据 group by 返回它的事实。因此,首先按值排序的内部查询确保始终首先找到最大值。
(但它并不完全可靠,因为 mysql 优化器最终可能会以不同的方式安排查询。它实际上并没有定义应该返回哪一行。
如果这对您不起作用,请尝试搜索 Max-group-concat 技巧。