Transact SQL:仅当2列值相同时才进行最近的更改

我试图编写一个SQL请求,它将在我的数据库中获取用户,但这里有诀窍,如果有两次相同的电子邮件,我只想获取最新的一个(我的数据库中有一个时间戳)

这是SQL CODE

 SELECT cs_login, cs_email_opt_out_did 
 FROM dbo.individual 
 WHERE insert_date >= '2016-12-05 00:00:00' and insert_date < dateadd(day,1,'2016-12-05 23:59:59')

cs_login是我要检查重复的电子邮件地址
cs_email_opt_oud_did是一个布尔值,其值无关紧要
insert_date是我想要检查最新日期的时间戳

我的问题是我有2个电子邮件地址user@test.com,其中包含不同的cs_email_opt_out_did值.我不知道如何从insert_date列中选择具有最新日期值的那个

最佳答案 您可以使用像
DENSE_RANK这样的排名窗口功能

 SELECT cs_login, cs_email_opt_out_did  FROM (
 SELECT cs_login,cs_email_opt_out_did,insert_date, DENSE_RANK() OVER (PARTITION BY cs_login ORDER BY insert_date Desc) as [Rank]
 FROM dbo.individual 
 WHERE insert_date >= '2016-12-05 00:00:00' and insert_date < dateadd(day,1,'2016-12-05 23:59:59')) AS T1
 WHERE T1.[Rank] = 1

您还可以使用其他功能,如RANKROW_NUMBER

点赞