给定一个表valuetable
ID:somevalues:DATE_TIME
1:50:2012年10月5日十三点00分00秒
2:45:2012年10月5日13: 15:00
3:35:2012年10月5日13时20分○○秒
4:20:2012年10月5日15:00:00
5:45:2012年10月5日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
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
ORDER BY SOMEVALUES DESC
) AS TEMPT2
GROUP BY HOUR(DATE_TIME)) AS MAXVALTABLE
ON MINVALTABLE.MINHOUR=MAXVALTABLE.MAXHOUR;
查询应输出这里,
MINHOUR | MINVALUES | MINDATETIME | MAXHOUR | MAXVALUES | MAXDATETIME
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
请让我知道是否我错过了任何东西,或者如果有更好的方法做到这一点。
据我了解,查询同样可以白天使用组,一个月等