基于单列去重并按最新variation_id获取关联表记录的SQL实现
解决方法:筛选最新variation_id的关联行
你需要的是基于两张表的关联,筛选出每个ID和行号对应的最新版本(最大variation_id)的记录。核心思路是先定位第二张表中每个(ID2, ID-LineNO)组合的最新版本号,再关联回原表和第一张表得到最终结果。
完善后的SQL语句
SELECT DISTINCT t1.ID1, t2.ID2, t2.`ID-LineNO`, t2.variation_id2 FROM first_table t1 INNER JOIN second_table t2 ON t1.ID1 = t2.ID2 INNER JOIN ( -- 子查询:获取每个ID2+ID-LineNO对应的最新variation_id2 SELECT ID2, `ID-LineNO`, MAX(variation_id2) AS latest_var FROM second_table GROUP BY ID2, `ID-LineNO` ) t2_latest ON t2.ID2 = t2_latest.ID2 AND t2.`ID-LineNO` = t2_latest.`ID-LineNO` AND t2.variation_id2 = t2_latest.latest_var
逻辑说明
- 子查询
t2_latest:通过GROUP BY ID2, ID-LineNO对第二张表分组,用MAX(variation_id2)拿到每个分组的最新版本号——因为每次更新都会插入新行,更大的variation_id就对应更晚的记录。 - 关联原表:将
second_table和子查询关联,确保只取出每个分组中版本号匹配最新值的记录。 - 关联第一张表:通过
ID1 = ID2关联两张表,同时用DISTINCT去除第一张表中同一ID多条重复记录带来的冗余结果。
测试验证
用你提供的测试数据运行这条SQL,会返回完全符合期望的结果:
| ID1 | ID2 | ID-LineNO | variation_id2 |
|---|---|---|---|
| 111 | 111 | 10 | 2 |
| 111 | 111 | 20 | 2 |
内容的提问来源于stack exchange,提问作者rajini
相关产品推荐
相关产品推荐

