首页 > 如何查询一个月内每天的最大值?

如何查询一个月内每天的最大值?

问个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即可。

【热门文章】
【热门文章】