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

включают электронную почту и max (postyear) в 'select' и удаляют' 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(), а не rank() :) У меня есть следующий вопрос здесь: http://stackoverflow.com/questions/42325221/getting-max-post-year-group- by-email-with-num-years Может помочь взглянуть? Большое спасибо! – sweetyBaby

+0

@sweetyBaby - согласно описанию вашей проблемы * «max Post_year group по электронной почте» *, ранг имеет больше смысла для меня, так как он получает все строки с максимальным годом. Я изначально ответил на это с помощью row_number и позже изменил его на ранжирование. В любом случае, рад, что это сработало для вас. Я обновил ответ. :-) – GurV

 Смежные вопросы

  • Нет связанных вопросов^_^