问个sql的查询语句问题:
datetime value
2014-01-01 00:00 0.5
2014-01-01 00:01 0.9
...
2014-01-31 11:59 0.7
表里有每分钟的记录数据,我想查询一月份每天的最大值,sql语句应该怎样写?
即总共返回31条记录,每条记录的值为每天的最大值。
所用数据库为postgresql.
SELECT
DATE(datatime) AS date,
MAX(value) AS value
FROM
temp
GROUP BY
date
基本就是先将时间转化为日期,然后根据日起分组求max。这里的转化我用的mysql是data()函数,其他数据库可能需要别的函数。
另外,我这个没加where语句,加上就可以限制显示一月份共31条了。
这个方法有个缺点,如果某一天一条记录都没有,那么查询出来不会显示这一天的记录。如果要显示的话啊需要用其他方法,等等我贴上来。
SELECT
date(CONCAT('2015-1-', num.id)) AS date,
IFNULL((max(temp.VALUE)) ,0) AS VALUE
FROM
num
LEFT JOIN (
SELECT * FROM temp
WHERE temp.datatime >= DATE('2015-1-01')
AND temp.datatime <= DATE('2015-1-31')
) temp ON num.id = DAY (temp.datatime)
WHERE num.id <= 31
GROUP BY
num.id
这是修改完的,原理是利用一个辅助表num,num中只有一列id,共31行分别为1-31。将筛选过的主表左连接至num表上即可保证,查出的记录数等于当月天数。其中没有记录的日期的max(value)为null,用ifnull转化为0即可。