通过电子邮件获取最大post_year组

时间:2017-02-19 01:28:25

标签: sql sql-server sql-server-2016

见下表

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]

如何达到目的?

1 个答案:

答案 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