我试图在这里和其他论坛中找到上述问题的答案。
给定一个表值表
- 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
请让我知道我是否错过了任何事情,或者是否有更好的方法来做到这一点。
据我了解,查询同样可以用于按天、月等进行分组。