如何查找TRANS表中三列重复条目并按HPAN分组展示
解决TRANS表重复记录筛选问题
问题分析
你原查询的问题在于子查询中额外加入了TRANS_TYPE的匹配条件,而你的需求是仅根据REQAMT、ADDRESS_NAME、HPAN这三列判断重复,这就导致原本属于同一重复组的记录(比如HPAN=23、REQAMT=4.78、ADDRESS_NAME=Paris但TRANS_TYPE不同的两条)被排除在重复判断外,最终返回了所有符合日期条件的记录。
解决方案
方法1:使用窗口函数(推荐)
窗口函数可以更高效地标记重复组,同时直接筛选出重复记录:
SELECT AUTHIDRESP, REQAMT, ADDRESS_NAME, HPAN, MSG_TYPE, TRANS_TYPE FROM ( SELECT AUTHIDRESP, REQAMT, ADDRESS_NAME, HPAN, MSG_TYPE, TRANS_TYPE, COUNT(*) OVER (PARTITION BY REQAMT, ADDRESS_NAME, HPAN) AS dup_count FROM TRANS WHERE date = '20240815' ) t WHERE dup_count > 1 ORDER BY HPAN, AUTHIDRESP;
方法2:修正子查询条件
去掉原查询中子查询里的TRANS_TYPE匹配条件,仅保留REQAMT、ADDRESS_NAME、HPAN的判断:
SELECT AUTHIDRESP, REQAMT, ADDRESS_NAME, HPAN, MSG_TYPE, TRANS_TYPE FROM TRANS s WHERE date = '20240815' AND 1 < ( SELECT COUNT(*) FROM TRANS i WHERE i.REQAMT = s.REQAMT AND i.ADDRESS_NAME = s.ADDRESS_NAME AND i.HPAN = s.HPAN ) ORDER BY HPAN, AUTHIDRESP;
说明
- 两种方法都会筛选出
REQAMT、ADDRESS_NAME、HPAN三列完全相同的所有重复记录 - 最后加上
ORDER BY HPAN, AUTHIDRESP可以实现按HPAN分组展示的效果(和你期望的输出一致)
内容的提问来源于stack exchange,提问作者headspace
相关产品推荐
相关产品推荐

