见下表
Email Post_Year
====== ==========
a@a.com 2007
a@a.com 2008
b@b.com 2009
b@b.com 2010
我希望通过电子邮件获得max Post_year组的结果
Email Post_Year
====== ==========
a@a.com 2008
b@b.com 2010
此代码不起作用,因为[Post_Year]
不是having
部分中的汇总操作
SELECT TOP (1000) *
FROM [DataExtraction2].[dbo].[Users]
group by [Email]
having max([Post_Year]) = [Post_Year]
如何达到目的?
答案 0 :(得分:1)
如果您只想获得电子邮件和发布年份,那么只需使用聚合:
Select email, max(post_year)
From [DataExtraction2].[dbo].[Users]
Group by email;
如果您要获取更多列,并希望获得每封电子邮件的最大post_year所有行,请使用窗口函数max
:
Select *
From (
Select t.*,
Rank() over (partition by email order by post_year desc) rn
From [DataExtraction2].[dbo].[Users] t
) t where rn = 1
如果您希望每封最多post_year的电子邮件只能获得一行(任意),请改用row_number
:
Select *
From (
Select t.*,
row_number() over (partition by email order by post_year desc) rn
From [DataExtraction2].[dbo].[Users] t
) t where rn = 1