SQL使用子查询查询近6个月数据无返回结果问题求助
问题原因分析
- 逻辑错误:原SQL中
MONTH(FromDate) = 6的作用是筛选月份为6月的记录,和「查询当日往前推6个月」的需求完全不符,这是无数据返回的核心原因。 - 字段类型兼容问题:表中
FromDate字段为CHAR(16)字符串类型,直接使用日期函数计算会失效,需要先转换为标准日期格式。 - 子查询逻辑错误:原SQL的子查询从同一张Service表筛选日期,既冗余也没有关联Allocation表的分配起始日期,不符合需求中以分配起始日期作为判断依据的要求。
修正后的SQL语句(MySQL环境)
SELECT TransportName, TransportCost, TransportMaxDist FROM Service WHERE TransportID IN ( SELECT TransportID FROM Allocation WHERE STR_TO_DATE(FromDate, '%Y-%m-%d') >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH) );
说明
- 子查询先从Allocation表筛选出分配起始日期在最近6个月内的运输服务ID,用
STR_TO_DATE将字符串类型的日期转换为标准日期格式参与计算 - 外层查询根据子查询返回的服务ID,从Service表中取出对应的服务名称、成本、最大行驶距离
- 用
CURDATE()动态获取当前日期,没有硬编码日期,符合需求要求 - 你提供的样例数据日期均为2020、2021年,早于当前时间的最近6个月范围,测试时可将样例日期调整为最近6个月内即可看到返回结果。
内容的提问来源于stack exchange,提问作者Mark Mario
相关产品推荐
相关产品推荐

