如何针对含重复ID的表选取各唯一ID首次出现的行?
提取每个唯一ID的首次出现行
问题描述
你有一张包含重复ID值的数据表:
| ID | Course1 | Course2 |
|---|---|---|
| S1 | A1 | A2 |
| S1 | A1 | B1 |
| S2 | D1 | B1 |
| S2 | C1 | B1 |
需要为每个唯一ID选取其首次出现的行,得到如下结果:
| ID | Course1 | Course2 |
|---|---|---|
| S1 | A1 | A2 |
| S2 | D1 | B1 |
解决方案
下面提供两种常用场景的实现方法:
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
相关产品推荐
相关产品推荐

