SQL Server:按比ContactID更大的顺序删除重复记录

SQL Server:按比ContactID更大的顺序删除重复记录,sql,sql-server,tsql,duplicates,Sql,Sql Server,Tsql,Duplicates,我一直在使用以下查询,以帮助我列出并查找表中的重复项 SELECT TOP 100 a.ContactID, a.[Company Name], a.PhoneNumber, a.Status, a.State FROM Contacts a JOIN (SELECT PhoneNumber, Status, COUNT(PhoneNumber) AS totals FROM Contacts GROUP BY PhoneNumber, Sta

我一直在使用以下查询,以帮助我列出并查找表中的重复项

SELECT TOP 100 
    a.ContactID, a.[Company Name], a.PhoneNumber, a.Status, a.State
FROM  
    Contacts a
JOIN 
    (SELECT PhoneNumber, Status, COUNT(PhoneNumber) AS totals
     FROM Contacts
     GROUP BY PhoneNumber, Status
     HAVING COUNT(PhoneNumber) > 1) b ON a.PhoneNumber = b.PhoneNumber
                                      AND a.Status = 'New'
                                      AND a.Status = b.Status
ORDER BY 
    a.PhoneNumber ASC
这将返回我在下面搜索的内容:

1365640108  MOBILTIY SHOP   2242057949  New IL
1365647384  MOBILITY SHOP   2242057949  New IL
1365640142  LIFE POINT CHILD  FAMILY    2242085228  New IL
1365647390  PROGAR MICHELLE 2242085228  New IL
1365640150  WILLIAM RYAN HOMES  2242098617  New IL
1365647393  WILLIAM RYAN HOMES  2242098617  New IL
1365640153  TRAVELHERO.COM  2242101344  New IL
1365647398  TRAVELHERO.COM  2242101344  New IL
1365645613  PFIZER INC  2242122000  New IL
1365645614  HOSPIRA WORLDWIDE INC   2242122000  New IL
现在,我想删除ContactID大于其他重复记录的记录

这就是我被困的地方。我搜索了搜索结果,但没有找到任何符合这个谜题的东西


想法?

您可以使用
行号()
和CTE。我认为这正是你想要的:

with cte as (
    select row_number() over(partition by PhoneNumber, Status order by ContactID) rn
    from contacts
    where status = 'New'
)
delete from cte where rn > 1

查询删除另一条记录的记录,该记录具有相同的
PhoneNumber
Status
以及最小的
ContactID

,您可以使用
行号()
和CTE。我认为这正是你想要的:

with cte as (
    select row_number() over(partition by PhoneNumber, Status order by ContactID) rn
    from contacts
    where status = 'New'
)
delete from cte where rn > 1

查询将删除另一条记录的记录,该记录具有相同的
电话号码
状态
,并且具有最小的
联系人ID

我刚才正在读取第行的号码谢谢!我刚才在看排号谢谢!