使用partion和where子句删除表中的重复项

时间:2019-03-20 16:03:33

标签: sql tsql

使用SQL Server 2016

我发现使用行上分区方法最快地复制大型表中的行。我正在尝试使用相同的过程删除一些重复项,但现在情况很特殊。

基本上,我需要删除除一个列外所有列上重复的行。但是,如果排除的列也被复制,则允许重复这些行,但是如果不同则不允许。

例如

col1     col2     col3    col4
1        2        3       4
1        2        3       4
1        2        3       5

前2行将被保留,但第三行需要删除。

通常,我将使用下面的代码删除按特定条件重复的行,但是我不知道如何解决当前情况。

delete x from (select col1, ROW_NUMBER() 
over (partition by col1 order by col1) As rn From table1) x 
where rn > 1 

感谢您的帮助。 仅供参考,该表包含2.26亿行。

1 个答案:

答案 0 :(得分:0)

我认为您要计数而不是行号:

with todelete as (
      select t1.*,
             count(*) over (partition by col1, col2, col3, col4) as cnt,
      from t1
     )
delete from todelete
    where cnt > 1;