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

如何基于hash_key和load_date组合删除重复行并保留STATUS值高的行?

删除重复行(按hash_key+load_date分组,保留STATUS降序首行)

核心思路是给每个hash_key与load_date的组合行按STATUS降序编号,保留编号为1的行,删除其余行。以下是具体实现方式:

通用SQL方案(支持PostgreSQL、SQL Server等)

使用CTE生成带序号的数据集,直接删除序号大于1的行:

WITH ranked_rows AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY hash_key, load_date 
            ORDER BY STATUS DESC
        ) AS row_num
    FROM my_table
)
DELETE FROM ranked_rows
WHERE row_num > 1;

MySQL兼容方案

MySQL不支持直接删除CTE中的数据,可通过关联子查询实现:

DELETE t1
FROM my_table t1
INNER JOIN (
    SELECT 
        id, -- 假设表有主键id,用主键关联更精准
        ROW_NUMBER() OVER (
            PARTITION BY hash_key, load_date 
            ORDER BY STATUS DESC
        ) AS row_num
    FROM my_table
) t2 ON t1.id = t2.id
WHERE t2.row_num > 1;

注意事项

  • 如果表没有主键,可使用多个字段组合关联(比如hash_key、load_date、STATUS加上其他唯一标识字段),避免误删数据。
  • 执行删除前建议先执行SELECT语句验证要删除的行是否正确:将DELETE替换为SELECT *,确认后再执行删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:06:02