如何在SQL中识别重复值?现有查询出现重复数据求助
识别SQL查询中的重复值
你的原始查询出现重复行,核心原因是inpatient_mapping表中存在多条满足token_person_id = a.token_person_id且disdate = a.indexdate的记录,LEFT JOIN后会将这些多条记录与a表的单条记录关联,从而产生重复输出。
以下是几种帮你定位重复值的查询方法:
1. 统计重复分组的次数
这个查询可以快速找出哪些token_person_id和indexdate的组合产生了重复,以及重复的次数:
SELECT a.token_person_id, a.indexdate, COUNT(*) AS duplicate_count FROM new_alzheimers_agegroup2 a LEFT JOIN inpatient_mapping b ON b.token_person_id = a.token_person_id AND a.indexdate = b.disdate GROUP BY a.token_person_id, a.indexdate HAVING COUNT(*) > 1 ORDER BY duplicate_count DESC;
2. 查看具体的重复记录详情
如果需要看到重复的具体数据(比如admidate的差异),可以用窗口函数标记重复行:
SELECT b.admidate, a.token_person_id, a.indexdate, ROW_NUMBER() OVER (PARTITION BY a.token_person_id, a.indexdate ORDER BY b.admidate) AS row_num FROM new_alzheimers_agegroup2 a LEFT JOIN inpatient_mapping b ON b.token_person_id = a.token_person_id AND a.indexdate = b.disdate ORDER BY a.token_person_id, a.indexdate, row_num;
执行后,row_num大于1的行就是对应的重复记录,你可以通过这些数据排查inpatient_mapping表中同一token_person_id和disdate下存在多条记录的原因。
另外补充:你的原始查询未添加GROUP BY子句,COUNT(DISTINCT a.token_person_id)的统计逻辑并不合理,这也是导致结果不符合预期的一个因素。
内容的提问来源于stack exchange,提问作者Chelsea A
相关产品推荐
相关产品推荐

