MySQL查询某日期返回空结果,另一日期正常问题排查
问题原因与解决方案
首先,咱们直接揪出核心问题:你的子查询里漏掉了GROUP BY子句,这才导致了查询结果的异常。
为什么会出现这种现象?
当你在SELECT语句中同时使用聚合函数(比如SUM(i_count))和非聚合字段(DATE(interval_start)),但没有指定GROUP BY时,MySQL在未开启ONLY_FULL_GROUP_BY模式的情况下,不会报错,而是随机返回一条数据的非聚合字段值,同时计算整个表的聚合结果。
看你的表数据,第一条记录的interval_start日期是2020-10-08,所以子查询返回的date_time刚好是这个值,外层查询过滤'2020-10-08'时就能匹配到;但当你查询2020-10-09时,子查询返回的date_time还是随机取的某条(大概率是2020-10-08的),自然就匹配不到,返回空结果。
解决方案
只需要在子查询中添加GROUP BY DATE(interval_start),让MySQL按日期分组计算每天的i_count总和,这样外层查询就能正确过滤到目标日期的数据了。
修正后的SQL如下:
SELECT * FROM ( SELECT SUM(i_count), DATE(interval_start) as date_time FROM rv_data_reports s GROUP BY DATE(interval_start) -- 按日期分组,这是关键 ) e where date_time = '2020-10-09';
另外,你也可以简化写法,去掉子查询,直接先过滤日期再分组,效率更高:
SELECT SUM(i_count), DATE(interval_start) as date_time FROM rv_data_reports s WHERE DATE(interval_start) = '2020-10-09' GROUP BY DATE(interval_start);
额外建议
建议开启MySQL的ONLY_FULL_GROUP_BY模式(这是MySQL 5.7及以上版本的默认配置),它会强制要求聚合查询必须明确分组字段,避免这种隐性的随机结果问题,让SQL逻辑更严谨。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

