如何查询指定月份日期列按日分组的MIN、MAX值
需求实现方案
核心逻辑
先将带时分秒的Date字段截断到天维度,再按天分组统计对应时间极值即可,不同数据库的日期处理语法略有差异,通用实现方案如下:
不同数据库实现代码
MySQL 版本
SELECT DATE(`Date`) AS 统计日期, MIN(`Date`) AS 当日最早时间, MAX(`Date`) AS 当日最晚时间 FROM 你的业务表名 WHERE `Date` BETWEEN '2021-10-01 00:00:00' AND '2021-10-31 23:59:59.999' GROUP BY DATE(`Date`) ORDER BY 统计日期;
PostgreSQL 版本
SELECT DATE("Date") AS 统计日期, MIN("Date") AS 当日最早时间, MAX("Date") AS 当日最晚时间 FROM 你的业务表名 WHERE "Date" >= '2021-10-01' AND "Date" < '2021-11-01' GROUP BY DATE("Date") ORDER BY 统计日期;
SQL Server 版本
SELECT CAST([Date] AS DATE) AS 统计日期, MIN([Date]) AS 当日最早时间, MAX([Date]) AS 当日最晚时间 FROM 你的业务表名 WHERE [Date] >= '2021-10-01' AND [Date] < '2021-11-01' GROUP BY CAST([Date] AS DATE) ORDER BY 统计日期;
注意事项
- 过滤条件优先使用范围查询,不要对
Date字段做函数运算后再过滤,避免索引失效提升查询效率 - 代码中的
你的业务表名请替换为实际使用的表名 - 如果
Date字段存储的是字符串格式,请先转换为日期时间类型再做运算,避免出现统计错误
内容的提问来源于stack exchange,提问作者Maryo David
相关产品推荐
相关产品推荐

