从表中删除未使用特定值设置的重复项

时间:2014-08-15 11:42:02

标签: sql sql-server sql-server-2012

我有一个名为bit的{​​{1}}列的表格。我想删除未设置为IsRetry的所有重复电子邮件地址。如果有重复的IsRetry我也想删除它们。我尝试按IsRetry进行分区,但我仍然最终收到设置为IsRetry的电子邮件。下面的SQL是删除重复项,但它保留每个电子邮件之一。意思是,一个设置为IsRetry而另一个设置为IsRetry。我应该运行查询来删除初始重复项,然后另一个查询删除任何不是IsRetry的重复项,还是可以将其复制到一个查询中?

IsRetry

Here is the fiddle for it

1 个答案:

答案 0 :(得分:3)

听起来你只想留下一封电子邮件。如果设置了IsRetry,那么您希望它是一组。如果是,那么您不希望IsRetry 分区。你想在order by子句中找到它:

with todelete as (
     select e.*,
            row_number() over (partition by EmailAddress
                               order by IsRetry desc ) as seqnum
     from Emails
    )
delete from todelete
    where seqnum > 1;

我将分区更改为使用email。可以使用相同的MD5哈希码来生成两个不同的电子邮件。