基于多列判定重复并保留单条记录的数据筛选技术问询
基于多列判定重复项并筛选记录的解决方案
一、SQL实现:基于多列组合筛选重复组的任意一行
要实现按多列组合判定重复,再从每组重复项里挑任意一行,有两种实用方法:
方法1:窗口函数(灵活可控)
假设你的表是data,用来判定重复的列是col1, col2, col3,用ROW_NUMBER()给每组重复项编号,取编号为1的行就行:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3 ORDER BY (SELECT NULL)) AS rn FROM data ) t WHERE rn = 1;
- 说明:
PARTITION BY后面跟的就是用来判定重复的多列;ORDER BY (SELECT NULL)是随机取每组任意一行,如果要固定取某一行(比如ID最小的),换成ORDER BY id ASC就行。
方法2:分组+关联查询
如果只需要保留部分列,也可以先分组取每组的唯一标识(比如最小ID),再关联原表取整行:
SELECT d.* FROM data d JOIN ( SELECT col1, col2, col3, MIN(id) AS min_id FROM data GROUP BY col1, col2, col3 ) t ON d.id = t.min_id;
二、Excel实现:多列组合判定重复并筛选每组任意一行
假设用来判定重复的是A、B、C列,数据从第2行开始:
方法1:辅助列标记法
- 在空白列(比如D列)的D2单元格输入公式,把多列内容合并成唯一标识:
下拉填充到所有行。=A2&B2&C2 - 再在E列E2单元格输入公式,标记每组重复项的第一行:
下拉后,显示=COUNTIF($D$2:D2,D2)=1TRUE的行就是每组重复项里的第一行,直接筛选这部分行即可。
方法2:高级筛选法
- 选中整个数据区域,点击「数据」选项卡的「高级」筛选。
- 在弹窗里选「将筛选结果复制到其他位置」,勾选「选择不重复的记录」,设置好结果存放位置后点确定。
- 注意:高级筛选默认按所有可见列的组合判定重复,要是只需要特定列组合,得先设置对应的条件区域。
内容的提问来源于stack exchange,提问作者Tunde Ebohon
相关产品推荐
相关产品推荐

