如何实现按日获取最高值?SQL查询调整需求
按日统计数据最高值的SQL实现
原查询只能获取指定时间段内的全局最大值,要实现按日统计每日最高值,核心是把时间戳按日期分组,再对每组计算最大值。以下是具体实现:
核心思路
通过日期截断函数将timestamp字段转换为纯日期格式(去除时分秒),然后按这个日期字段分组,最后对每组的value取最大值。不同数据库的日期处理函数略有差异,下面列出主流数据库的写法:
1. 特定时间段的每日最高值
保留原查询的时间范围过滤条件,添加分组逻辑:
MySQL / MariaDB
SELECT DATE(timestamp) AS date, MAX(value) AS daily_max_value FROM table WHERE timestamp BETWEEN '2018-07-22 00:00:00' AND '2025-04-22 23:59:59' GROUP BY DATE(timestamp) ORDER BY date;
PostgreSQL
SELECT DATE_TRUNC('day', timestamp)::DATE AS date, MAX(value) AS daily_max_value FROM table WHERE timestamp BETWEEN '2018-07-22 00:00:00' AND '2025-04-22 23:59:59' GROUP BY DATE_TRUNC('day', timestamp) ORDER BY date;
SQL Server
SELECT CAST(timestamp AS DATE) AS date, MAX(value) AS daily_max_value FROM table WHERE timestamp BETWEEN '2018-07-22 00:00:00' AND '2025-04-22 23:59:59' GROUP BY CAST(timestamp AS DATE) ORDER BY date;
2. 全表数据的每日最高值
只需去掉时间范围的WHERE条件即可:
MySQL / MariaDB
SELECT DATE(timestamp) AS date, MAX(value) AS daily_max_value FROM table GROUP BY DATE(timestamp) ORDER BY date;
示例结果(基于你提供的数据)
执行特定时间段查询(范围2018-07-22至2025-04-22)后,会得到如下结果:
| date | daily_max_value |
|---|---|
| 2018-07-24 | 196 |
| 2018-07-25 | 469 |
如果执行全表查询,结果会包含所有有数据的日期:
| date | daily_max_value |
|---|---|
| 2018-07-05 | 258 |
| 2018-07-07 | 300 |
| 2018-07-08 | 323 |
| 2018-07-09 | 250 |
| 2018-07-10 | 380 |
| 2018-07-24 | 196 |
| 2018-07-25 | 469 |
内容的提问来源于stack exchange,提问作者montes
相关产品推荐
相关产品推荐

