【问题标题】: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 技巧。

      【讨论】:

        猜你喜欢
        • 2015-01-23
        • 2021-06-02
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 2012-07-13
        • 2010-12-06
        • 2018-10-14
        • 2010-11-23
        相关资源
        最近更新 更多