考虑这些数据:
id firstname lastname registration_date
101126423 foo bar 2010-06-17 13:31:00.000
101126423 foo bar 2010-06-17 13:31:00.000
101126423 foo bar jr 2010-06-18 12:13:00.000
101152718 john doe 2010-02-26 19:08:00.000
101152718 john doe 2010-02-26 19:08:00.000
101152718 john doe 2010-02-26 19:08:00.000
您可以让客户使用相同的id
,但使用不同的firstname
/ lastname
!我希望获得所有不同 ID,但使用最新的firstname / lastname(基于registration_date)。
对于我的例子,我会得到:
id firstname lastname
101126423 foo bar jr
101152718 john doe
到目前为止,我得到了:
SELECT DISTINCT id, firstname, lastname
FROM member
但它显然不起作用......到目前为止,我已尝试过其他查询但没有成功。也许having
可以帮助我,但我从未使用过它......
我在这个项目中使用SQL Server 2008。
答案 0 :(得分:1)
为您提供几种选择:
选项1:
;with cte as(
select id, max(registration_date) lastReg
from member
group by id
)
select distinct m.id, m.firstname, m.lastname
from member m
join cte c on m.id=c.id
and m.registration_date = c.lastReg
选项2:
;with cte as(
select id, firstname, lastname,
row_number() over(partition by id order by registration_date desc) as 'order'
from member
)
select id, firstname, lastname
from cte
where order = 1
两者在结果方面的最大区别在于它们如何处理最近注册时间与具有多个名称的id重复的情况。在这种情况下,选项1将返回具有最新注册日期的两个名称,而选项2将仅返回一个(随机)。这种情况的一个例子是(略微调整样本数据):
id firstname lastname registration_date
101126423 foo bar 2010-06-17 13:31:00.000
101126423 foo bar 2010-06-18 12:13:00.000
101126423 foo bar jr 2010-06-18 12:13:00.000
101152718 john doe 2010-02-26 19:08:00.000
101152718 john doe 2010-02-26 19:08:00.000
101152718 john doe 2010-02-26 19:08:00.000
--Option 1 result:
id firstname lastname
101126423 foo bar
101126423 foo bar jr
101152718 john doe
--Option 2 result (possibility 1):
id firstname lastname
101126423 foo bar
101152718 john doe
--Option 2 result (possibility 2):
id firstname lastname
101126423 foo bar jr
101152718 john doe