SQL Express 2014无主键事务表删重复保留最新记录的方案咨询
操作前置提醒
操作前请先对原表做全量备份,避免误删数据无法恢复。
步骤1:先验证待删除的重复记录
将语句中的你的表名替换为实际的销售事务表名称后执行,可以查看所有待删除的重复记录,核对符合预期后再执行删除操作:
WITH RankedRecords AS ( SELECT ACC_PART_MAT, TX_DATE, ROW_NUMBER() OVER (PARTITION BY ACC_PART_MAT ORDER BY TX_DATE DESC) AS RowNum FROM 你的表名 ) SELECT * FROM RankedRecords WHERE RowNum > 1;
步骤2:执行重复记录删除
确认待删除数据无误后,执行以下语句完成去重:
WITH RankedRecords AS ( SELECT ROW_NUMBER() OVER (PARTITION BY ACC_PART_MAT ORDER BY TX_DATE DESC) AS RowNum FROM 你的表名 ) DELETE FROM RankedRecords WHERE RowNum > 1;
说明
- 该方案适配SQL Server 2014及以上版本,无主键表也可以正常执行,原理是通过窗口函数对相同
ACC_PART_MAT的记录按TX_DATE倒序排名,删除排名大于1的非最新记录。 - 如果同一个
ACC_PART_MAT存在多条TX_DATE完全相同的记录,上述语句会随机保留一条,你可以在ORDER BY后追加其他可区分的排序字段(比如交易流水号、交易时间戳等)明确保留规则,示例:ORDER BY TX_DATE DESC, TX_SERIAL_NO DESC
内容的提问来源于stack exchange,提问作者WillSmyth
相关产品推荐
相关产品推荐

