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

如何从重复行中选取第一条记录?附重复数据排查场景

从重复记录中选取第一条的解决方案

要从HREMP表的重复记录里,为每个重复的ID保留第一条记录,用窗口函数ROW_NUMBER()是最直接的方案,给你两种实用写法:

方法一:子查询写法

SELECT *
FROM (
    SELECT 
        a.*,
        -- 按ID分组,给每组内的记录编序号;用(SELECT NULL)表示不指定排序规则,取数据库默认返回的第一条
        ROW_NUMBER() OVER (PARTITION BY a.ID ORDER BY (SELECT NULL)) AS rn
    FROM HREMP a
) tt
WHERE tt.rn = 1;

方法二:CTE(公共表表达式)写法(更易读)

如果你的数据库支持CTE(比如MySQL 8.0+、PostgreSQL、SQL Server等),可以用这种结构更清晰的写法:

WITH ranked_employees AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT NULL)) AS rn
    FROM HREMP
)
SELECT * FROM ranked_employees WHERE rn = 1;

关键补充说明

  • 如果你需要明确指定“第一条”的规则(比如取创建时间最早的记录),把ORDER BY (SELECT NULL)换成对应的业务字段即可,示例:
    ROW_NUMBER() OVER (PARTITION BY ID ORDER BY create_time ASC) AS rn
    
  • 执行后,结果会包含所有非重复记录(685条)加上每个重复ID的第一条记录(196条),总共881条,完全匹配你的数据统计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:18