如何修正SQL查询以按指定条件筛选目标Job记录
修正后的SQL查询方案
原查询存在的问题
- 错误引用了不存在的字段
JobExpireDate,Jobs表中实际字段为JobPostedDate; - 未正确实现“拥有多个JobLocationType且所有关联Review超3年”的判断逻辑;
- 两个分支的
UNION冗余,第二个分支无需关联JobLocationType表。
修正后的查询语句
WITH JobStats AS ( SELECT j.JobId, j.JobTrackNumber, j.JobPostedDate, COUNT(jlt.LocationNumber) AS LocationCount, MAX(r.ReviewDate) AS LatestReviewDate FROM Jobs j LEFT JOIN JobLocationType jlt ON j.JobId = jlt.JobId LEFT JOIN Review r ON jlt.LocationNumber = r.ReviewLocationType GROUP BY j.JobId, j.JobTrackNumber, j.JobPostedDate ) SELECT JobId, JobTrackNumber FROM JobStats WHERE NOT (JobPostedDate >= '2021-01-01' AND JobPostedDate < '2023-01-01') AND ( (LocationCount >= 2 AND (LatestReviewDate IS NULL OR LatestReviewDate < DATEADD(YEAR, -3, GETDATE()))) OR JobPostedDate < DATEADD(YEAR, -5, GETDATE()) );
逻辑说明
- CTE统计核心指标:通过
JobStats计算每个Job的关联地点数量、最新Review日期,为后续筛选提供基础数据; - 基础筛选:排除2021-01-01至2023-01-01期间发布的Job;
- 双条件判断:
- 多地点Job:判断所有关联Review(若存在)的日期均超过3年(无Review时也满足该子条件);
- 发布超5年的Job:直接通过发布日期判断,无需考虑地点和Review情况。
内容的提问来源于stack exchange,提问作者I Love Stackoverflow
相关产品推荐
相关产品推荐

