通过电子邮件
获取最大post_year组考虑到见下表通过电子邮件
Email Post_Year
====== ==========
[email protected] 2007
[email protected] 2008
[email protected] 2009
[email protected] 2010
我希望有最大Post_year组结果通过电子邮件
Email Post_Year
====== ==========
[email protected] 2008
[email protected] 2010
此代码不会因为[Post_Year]
工作不汇总操作having
部分
SELECT TOP (1000) *
FROM [DataExtraction2].[dbo].[Users]
group by [Email]
having max([Post_Year]) = [Post_Year]
如何达到目的?
如果要得到公正的电子邮件和后一年,然后只需使用聚合:
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
谢谢!我需要的是第二个,与row_number(),而不是秩():)我有一个后续问题在这里:http://stackoverflow.com/questions/42325221/getting-max-post-year-group-通过电子邮件与年数 可以帮助看看?非常感谢! – sweetyBaby
@sweetyBaby - 根据您的问题描述*“通过电子邮件发送最大的Post_year组”*,排名对我来说更有意义,因为它获得了所有最大年份的行。我最初用row_number回答了它,并稍后将其更改为rank。无论如何,很高兴它为你工作。我已经更新了答案。 :-) – GurV
在'select'中包含email和max(postyear),并从查询中删除'having'和'top'。 –