【问题标题】:MySQL getting Minimum / Maximum values along with corresponding date/time field grouped by hour, day, month etcMySQL获取最小值/最大值以及按小时、日、月等分组的相应日期/时间字段
【发布时间】:2012-10-05 06:10:22
【问题描述】:

我试图在这里和其他论坛中找到上述问题的答案。

给定一个表值表

  • ID:一些值:date_time
  • 1:50:2012-10-05 13:00:00
  • 2:45:2012-10-05 13:15:00
  • 3:35:2012-10-05 13:20:00
  • 4:20:2012-10-05 15:00:00
  • 5:45:2012-10-05 15:25:00
  • 6:35:2012-10-05 15:35:00

等等,你如何找到最小值和最大值以及按小时、日、月等分组的相应日期和时间。

这里的问题是,SQL 中的 GROUP 只有小时,而在 MYSQL 中,将返回出现在集合或表中的第一个日期时间。我了解其他 RDBMS 中的实现有所不同。因此,我使用 ORDER BY 对表进行第一次排序,这样当我们运行查询时,值按照最小和最大查询按升序和降序排序,这样当我们每小时选择最小值和最大值时,第一个日期-查询选择的时间是与最小值或最大值相关的时间。

下面给出了每小时提取最小值和最大值的查询,

SELECT 
        * 
FROM(
    SELECT 
        HOUR(DATE_TIME) AS MINHOUR, 
        MIN(SOMEVALUES) AS  MINVALUES, 
        DATE_TIME AS MINDATETIME FROM (SELECT * FROM VALUETABLE
    WHERE DATE_TIME>'2012-10-05 00:00:00' 
    AND DATE_TIME<'2012-10-05 23:59:59' 
    ORDER BY SOMEVALUES
    ) AS TEMPT1 
    GROUP BY HOUR(DATE_TIME)
    ) AS    MINVALTABLE 
LEFT JOIN (
    SELECT 
        HOUR(DATE_TIME) AS MAXHOUR,
        MAX(SOMEVALUES) AS MAXVALUES, 
        DATE_TIME AS MAXDATETIME FROM 
        (
            SELECT 
                *
            FROM VALUETABLE 
            WHERE DATE_TIME>'2012-10-05 00:00:00' 
            AND DATE_TIME<'2012-10-05 23:59:59' 
            ORDER BY SOMEVALUES DESC
        ) AS TEMPT2
GROUP BY HOUR(DATE_TIME)) AS MAXVALTABLE 
ON  MINVALTABLE.MINHOUR=MAXVALTABLE.MAXHOUR;

查询应该像这里一样输出,

  • 分钟 |最小值 |时间 |最大小时 |最大值 |最大日期时间
  • 13 | 35 | 2012-10-05 13:20:00 | 13 | 50 | 2012-10-05 13:00:00
  • 15 | 20 | 2012-10-05 15:00:00 | 15 | 45 | 2012-10-05 15:25:00

如果我遗漏了什么或者是否有更好的方法,请告诉我。

据我了解,查询同样可以用于按天、月等分组。

【问题讨论】:

    标签: mysql group-by sql-order-by max min


    【解决方案1】:

    试试这个查询的最大值

    SELECT
        t.id,
        DATE_FORMAT(lt.datetime, '%H') as Hour,
        DATE_FORMAT(lt.datetime, '%d') as Day,
        DATE_FORMAT(lt.datetime, '%m') as Month
    FROM table as t
    LEFT JOIN (SELECT MAX(id),datetime FROM table)  as lt ON lt.id = t.id
    GROUP BY Month , Day , Hour
    

    如果不是你想要的,请澄清你的问题

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2019-05-31
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多