You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server删除仅日期或批次号不同的重复数据行方案咨询

SQL Server 重复行删除方案

可复用查询代码

你可以直接使用如下带ROW_NUMBER()的CTE语句实现需求,建议先执行注释中的SELECT语句验证待删除数据,确认无误后再执行DELETE操作:

WITH DuplicateGroup AS (
    SELECT
        *,
        -- 按重复基准字段分组,组内按保留优先级排序
        ROW_NUMBER() OVER(
            PARTITION BY ID_NUMBER, INCEPTION_DATE, OCCURRENCE
            ORDER BY FILE_LOAD_DATE ASC, BATCH_NUM ASC
        ) AS RowRank
    FROM mastertable
    WHERE SOURCE_SYSTEM = 'LEGACY'
)
-- 第一步:先运行下面的SELECT校验待删除数据是否符合预期
-- SELECT * FROM DuplicateGroup WHERE RowRank > 1
-- 第二步:校验无误后注释SELECT,执行DELETE完成删除
DELETE FROM DuplicateGroup WHERE RowRank > 1

运行原理

  • 分组逻辑:PARTITION BY后配置的是你判定重复的基准字段,三个字段值完全相同的行会被划到同一个分组,和你原有查询的重复判定规则完全一致。
  • 保留规则:ORDER BY后配置的是组内行的优先级,先按FILE_LOAD_DATE升序排列,更早的加载日期优先级更高;如果加载日期相同,再按BATCH_NUM升序排列,更小的批次号优先级更高。组内优先级最高的行RowRank值为1,是需要保留的记录,其余RowRank>1的都是要删除的重复行。
  • 执行逻辑:SQL Server支持对单表生成的CTE执行写操作,删除CTE中符合条件的行时,会直接同步删除底层mastertable的对应数据,不需要额外关联原表,语法简洁高效。
  • 复用说明:后续处理同类去重需求时,仅需要修改三处配置即可适配:PARTITION BY后的重复判定字段、ORDER BY后的保留优先级规则、WHERE子句的筛选范围,不需要调整整体结构。

内容的提问来源于stack exchange,提问作者Nicholas Gregory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:54:08