2015-12-04 13 views
3

у меня есть следующая таблица ...SQL Max (дата) без группы по

MemberID ServDate 
001  12-12-2015 
001  12-13-2015 
001  12-15-2015 
002  11-30-2015 
002  12-04-2015 

И я хочу, чтобы это выглядело, как это ...

MemberID ServDate  LastServDate 
001  12-12-2015 12-15-2015 
001  12-13-2015 12-15-2015 
001  12-15-2015 12-15-2015 
002  11-30-2015 12-04-2015 
002  12-04-2015 12-04-2015 

Есть ли способ, которым я может сделать это, не используя GROUP BY или вложенный запрос? (Я имею дело с очень большой базой данных, и GROUP BY значительно замедляет работу)

Спасибо!

+2

что ваша РСУБД? –

+0

может показать нам, какой запрос вы используете, и показать нам «объяснение плана», чтобы мы могли дать вам совет, как улучшить запрос. –

+0

Это база данных SQL Server. –

ответ

7
SELECT 
    MemberID, ServDate, 
    MAX(ServDate) OVER (PARTITION BY MemberID) AS LastServDate 
FROM Table 

Стандарт SQL, поэтому работает в большинстве современных СУБД (включая SQL Server и Oracle).

EDIT, кстати, если вы хотите узнать больше: MSDN ref. for OVER

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