2

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

给定一个表值表

  • 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 仅小时和 IN 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

请让我知道我是否错过了任何事情,或者是否有更好的方法来做到这一点。

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

4

1 回答 1

0

尝试此查询以获得最大

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-10-05T06:22:06.437 回答