MySQL按日分组查询异常:期望2023.04.18-22数据却返回更早数据
问题分析与修正方案
原SQL的错误点
- 分组逻辑不严谨:
GROUP BY DAY(AEG)仅提取日期中的“日”部分分组,会把不同月份、年份的同一天数据(比如2023-04-18和2023-05-18)合并到同一组。同时SELECT子句直接返回AEG属于非标准SQL写法,MySQL宽松模式下会随机返回每组内的某一条AEG值,导致分组结果的日期逻辑混乱。 - 缺少日期范围过滤:语句未限定查询时间范围,数据库会遍历全表数据分组后取倒序前5条,自然无法精准获取你需要的2023-04-18至2023-04-22的数据。
- 排序逻辑失效:由于
AEG未经过聚合处理,ORDER BY AEG DESC是对每组内的单个AEG值排序,而非按分组后的完整日期排序,导致取到的前5组并非最新的日期分组。
修正后的SQL语句
SELECT DATE(AEG) AS stat_date, MAX(KWHI2) - MIN(KWHI2) AS PV FROM LOGPV WHERE AEG BETWEEN '2023-04-18 00:00:00' AND '2023-04-22 23:59:59' GROUP BY DATE(AEG) ORDER BY stat_date DESC;
修正说明
- 用
DATE(AEG)将datetime类型的AEG转换为纯日期格式,确保分组和查询结果对应完整的一天,且符合SQL规范(SELECT与GROUP BY字段一致)。 - 添加
WHERE条件通过BETWEEN限定目标日期范围,精准筛选2023-04-18至2023-04-22的数据。 - 基于格式化后的
stat_date排序,保证结果按日期倒序排列。
内容的提问来源于stack exchange,提问作者Maario
相关产品推荐
相关产品推荐

