我正在努力找到适当的语句来选择仅对特定列重复的非重复条目 . 例如,在下表中我只关心col1,col2和col3中具有唯一值的行,而col4和col5中的值无关紧要 . 这意味着我会认为第1行和第2行是重复的,第4行和第5行是重复的:
col1 col2 col3 col4 col5
A 2 p 0 2
A 2 p 1 8
A 3 r 4 12
B 0 f 3 1
B 0 f 6 5
我只想选择以下内容:
col1 col2 col3 col4 col5
A 2 p 0 2
A 3 r 4 12
B 0 f 3 1
有没有办法组合多个DISTINCT语句来实现这一点,或者在比较重复行时指定要忽略的某些列?
1 回答
您必须选择要保留的行,您可以使用
ROW_NUMBER()
函数:您可以更改
ORDER BY
部分以更改您保留的行以及您要丢弃的行 .ROW_NUMBER()
函数只是为每一行指定一个数字,在本例中,您希望保留col1
,col2
,col3
的每个组合,因此它们是PARTITION BY
,这意味着对于它们的每个组合,编号将从1开始 . 您可以只运行内部查询来获取想法 .或者,您可以使用
GROUP BY
和聚合函数,即:这里的缺点是
col4
和col5
的MAX()
可能来自不同的行,所以你关心你返回哪一行然后无所谓 .