2017-02-19 208 views
1

获取最大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] 

如何达到目的?

+0

在'select'中包含email和max(postyear),并从查询中删除'having'和'top'。 –

回答

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 
+0

谢谢!我需要的是第二个,与row_number(),而不是秩():)我有一个后续问题在这里:http://stackoverflow.com/questions/42325221/getting-max-post-year-group-通过电子邮件与年数 可以帮助看看?非常感谢! – sweetyBaby

+0

@sweetyBaby - 根据您的问题描述*“通过电子邮件发送最大的Post_year组”*,排名对我来说更有意义,因为它获得了所有最大年份的行。我最初用row_number回答了它,并稍后将其更改为rank。无论如何,很高兴它为你工作。我已经更新了答案。 :-) – GurV