SQL多表关联求助:无法获取dp_id与pm_id组合的最新日期记录
问题分析与修正
你的SQL返回所有行而非最新记录,主要有以下几个问题:
1. 关联表A时未匹配最新日期
子查询A1已经算出每个dp_id+cm_id组合的最新日期latest_run,但你关联表A时只匹配了dp_id和cm_id,没有把a.last_run_date和A1.latest_run关联起来。这会导致该组合下所有符合日期范围的行都被返回,而不是仅最新的那一条。
2. 表B的关联条件存在笔误
关联表B时,b.cm_id = a.dp_id明显是错误的,应该改为b.cm_id = a.cm_id,否则会用错误的字段关联,导致数据匹配异常。
3. 日期过滤逻辑不合理
当前的WHERE条件是过滤表A中所有日期在指定区间的行,但你需要的是每个组合的最新日期本身在该区间内,应该把日期过滤放到子查询中,或者在关联时确保最新日期符合条件。
修正后的SQL
SELECT b.a_i_id, b.a_e_id, a.last_run_date, a.cm_id, a.dp_id FROM ( SELECT dp_id, cm_id, MAX(last_run_date) AS latest_run FROM a WHERE CAST(last_run_date AS DATE) BETWEEN '2023-04-28' AND '2023-04-30' GROUP BY dp_id, cm_id ) A1 INNER JOIN a ON a.dp_id = A1.dp_id AND a.cm_id = A1.cm_id AND a.last_run_date = A1.latest_run -- 新增:匹配最新日期 INNER JOIN b ON b.dp_id = a.dp_id AND b.cm_id = a.cm_id -- 修正笔误
另外注意你需求中提到的是dp_id与pm_id组合,但SQL里用的是cm_id,如果是笔误,需要统一替换成pm_id。
内容的提问来源于stack exchange,提问作者DDS
相关产品推荐
相关产品推荐

