SQL如何从多行重复数据中仅选择并更新其中一条重复记录
解决方法
使用ROW_NUMBER()窗口函数替代COUNT即可实现按分组取指定行,完整方案如下:
1. 先查询确认需要标记删除的行
以下语句会返回每个重复分组中除保留行外的所有记录,包含完整字段,你可以先执行确认结果是否符合预期:
WITH DataSource AS ( SELECT *, -- 按Number分组,ORDER BY规则决定保留哪条,此处按ID升序,序号1为保留行 ROW_NUMBER() OVER (PARTITION BY Number ORDER BY ID) AS row_num FROM Customers ) SELECT * FROM DataSource WHERE row_num > 1
2. 直接执行更新操作
确认结果正确后,直接修改语句即可一步完成Deleted字段标记:
WITH DataSource AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Number ORDER BY ID) AS row_num FROM Customers ) UPDATE DataSource SET Deleted = 1 WHERE row_num > 1
提示:如果需要调整保留的行,只需要修改
ORDER BY后的排序规则即可,比如想保留ID更大的行,改成ORDER BY ID DESC即可。
内容的提问来源于stack exchange,提问作者user1673665
相关产品推荐
相关产品推荐

