我在尝试删除重复记录时遇到了麻烦。 我的数据如下:
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
我想删除重复的AccountId
和ContactId
记录,并希望从具有最新CreatedDate
的重复记录中保留记录。
本质上,从这个示例数据集中,我只想保留ID
为1、3、6和10(重复的记录并保留最新的createddate
)的记录。
我做了几次尝试,但是遇到了麻烦。 寻找建议。
答案 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