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

如何针对含重复ID的表选取各唯一ID首次出现的行?

提取每个唯一ID的首次出现行

问题描述

你有一张包含重复ID值的数据表:

IDCourse1Course2
S1A1A2
S1A1B1
S2D1B1
S2C1B1

需要为每个唯一ID选取其首次出现的行,得到如下结果:

IDCourse1Course2
S1A1A2
S2D1B1

解决方案

下面提供两种常用场景的实现方法:

1. SQL 实现(适用于数据库操作)

如果你的数据表存储在支持窗口函数的数据库(如PostgreSQL、MySQL 8.0+、SQL Server等),可以使用ROW_NUMBER()函数来标记每个ID的行顺序,然后筛选出序号为1的行。

WITH ranked_rows AS (
    SELECT 
        ID,
        Course1,
        Course2,
        -- 按ID分组,默认按数据存储顺序排序(即插入顺序)
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT NULL)) AS row_num
    FROM your_table_name
)
SELECT ID, Course1, Course2
FROM ranked_rows
WHERE row_num = 1;

注意:如果你的表有明确的排序依据(比如自增主键、创建时间字段),建议把ORDER BY (SELECT NULL)替换为对应的字段(如ORDER BY create_time ASC),这样结果的顺序会更稳定可靠。

2. Python Pandas 实现(适用于数据分析场景)

如果你用Python处理这份数据,Pandas库的drop_duplicates()方法可以快速实现需求:

import pandas as pd

# 构造原始数据(实际场景可以从文件/数据库读取)
df = pd.DataFrame({
    'ID': ['S1', 'S1', 'S2', 'S2'],
    'Course1': ['A1', 'A1', 'D1', 'C1'],
    'Course2': ['A2', 'B1', 'B1', 'B1']
})

# 保留每个ID的首次出现行
result_df = df.drop_duplicates(subset='ID', keep='first')

# 输出结果
print(result_df)

执行这段代码后,就能得到你期望的结果表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:19:21