使用rank函数实现SQL去重:同日期同answer_id仅customer_id不同记录保留1条
问题原因
你现有SQL的分区逻辑错误:PARTITION BY answer_id, customer_id的分组逻辑和你要求的去重规则完全不符,导致无法正确识别重复数据。
调整方案
按照你的去重规则,仅当除customer_id外所有字段完全一致时才视为重复数据,所以窗口函数的分区维度应该是所有排除customer_id的字段,每个分区只保留1条数据即可。你可以直接使用以下SQL:
select * from ( select *, row_number() over ( partition by created_at, answer_id, customer_name, product, email, score order by customer_id asc ) as rn from 你的表名 ) t where rn = 1
如果你的业务要求重复组里保留指定规则的记录,比如创建时间最新的,把order by customer_id asc改成order by created_at desc即可。
效果验证
该SQL执行后会完全匹配你给出的预期输出:
created_at=20/09/2021、answer_id=1502的两条记录属于同一重复组,仅保留1条created_at=22/08/2021、answer_id=3405的两条记录属于同一重复组,仅保留1条created_at=12/09/2021、answer_id=1439的记录单独为一组,正常保留
内容的提问来源于stack exchange,提问作者Luc
相关产品推荐
相关产品推荐

