SQL重复数据删除

时间:2019-02-21 00:42:40

标签: sql sql-server tsql

我在尝试删除重复记录时遇到了麻烦。 我的数据如下:

ID   -   AccountId  - ContactId  -   CreatedDATE    
1   -      100   -    1000    -      2017/11/25   
2    -    100    -   1000      -    2016/07/29  
3    -    200    -   2000   -       2015/12/25    
4   -     200  -     2000    -      2012/01/01     
5   -     300   -    3000    -      2010/09/15    
6    -     300   -    3000      -    2019/05/15    
7     -   300     -  3000     -     2018/03/25    
8     -   400    -   4000  -        2010/01/05    
9      -  400     -  4000   -       2011/01/05    
10    -   400  -     4000   -       2019/01/05    
11      - 400  -     4000   -       2014/01/05

我想删除重复的AccountIdContactId记录,并希望从具有最新CreatedDate的重复记录中保留记录。

本质上,从这个示例数据集中,我只想保留ID为1、3、6和10(重复的记录并保留最新的createddate)的记录。

我做了几次尝试,但是遇到了麻烦。 寻找建议。

2 个答案:

答案 0 :(得分:1)

;with CTE as (Select *
    , Row_Number() over (partition by AccountID, ContactID order by CreatedDate desc) as RN
from MyTable)

Select * from CTE where RN = 1

对于每个唯一的帐户ID / contactID,这仅应返回第一行。请注意,如果在创建日期有联系,它将伪随机地选择行之一。

答案 1 :(得分:0)

这应该有效

select a.* 
    from #test a 
inner join 
(
select accountid, 
    ContactId, 
    max(createddate) as createddate 
    from #test 
    group by accountid, ContactId
) b on a.accountid = b.accountid and a.ContactId = b.ContactId and a.createddate = b.createddate