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

DB2无主键表删除重复行:保留唯一A、B对及最大TS行

DB2 删除重复行解决方案(保留A、B唯一+最新TS)

针对AIX上DB2 v11.1.4.6环境,以下方案可一次性清理重复行,满足每个A、B字段唯一,TS值不同时保留TS更大的行,TS相同时确保仅保留一行的需求,支持干跑验证和实际执行,且基于EXISTS子句实现,规避ROWID相关报错问题。

1. 干跑验证(查询待删除的重复行)

先执行以下语句确认要删除的行是否符合预期,避免误操作:

SELECT *
FROM 你的表名 t1
WHERE EXISTS (
    SELECT 1
    FROM 你的表名 t2
    WHERE t2.A = t1.A
      AND t2.B = t1.B
      AND (
          t2.TS > t1.TS
          OR (t2.TS = t1.TS AND t2.ROWID > t1.ROWID)
      )
)

2. 实际执行(删除重复行)

确认干跑结果无误后,执行删除语句:

DELETE FROM 你的表名 t1
WHERE EXISTS (
    SELECT 1
    FROM 你的表名 t2
    WHERE t2.A = t1.A
      AND t2.B = t1.B
      AND (
          t2.TS > t1.TS
          OR (t2.TS = t1.TS AND t2.ROWID > t1.ROWID)
      )
)

方案说明

  • 核心逻辑:对每一行t1,如果存在同一A、B组合的行t2,要么TS值更大(说明t1是旧数据需删除),要么TS值相同但ROWID更大(说明t1是更早插入的重复行,保留t2)
  • 规避报错原因:通过表别名明确关联ROWID伪列,避免SQL0206N(列不存在)错误;无需使用MAX(ROWID)聚合,直接通过关联子句实现唯一行筛选

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:12:33