2017-02-19 205 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