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

SQL如何按条件删除重复记录,仅保留idperson1值最大的行

问题描述

我的示例表如下:

idmainidtimeidperson1idperson2
14120220106510384
22120220107300184
22120220107301184
46520220108300184
52520220109111123
52520220109112123
52520220109113123

重复记录仅在idperson1字段值上存在差异,需要删除这类重复记录,仅保留每组中idperson1字段值最大的记录,最终期望得到的结果表如下:

idmainidtimeidperson1idperson2
14120220106510384
22120220107301184
46520220108300184
52520220109113123
解决方法(适用于SQL Server环境)

使用窗口函数ROW_NUMBER()按重复判定维度分组,组内按idperson1倒序编号,仅保留每组编号为1的记录即可。

  • 查询去重后的结果:
SELECT idmain, idtime, idperson1, idperson2
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY idmain, idtime, idperson2 
            ORDER BY idperson1 DESC
        ) AS row_num
    FROM 替换为你的实际表名
) t
WHERE row_num = 1;
  • 直接删除原表中的重复数据:
    如果需要直接清理原表的重复记录,可以用可更新CTE写法,执行前务必备份数据:
WITH dedup_cte AS (
    SELECT 
        ROW_NUMBER() OVER (
            PARTITION BY idmain, idtime, idperson2 
            ORDER BY idperson1 DESC
        ) AS row_num
    FROM 替换为你的实际表名
)
DELETE FROM dedup_cte WHERE row_num > 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:54:15