2015-12-04 30 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

什麼是你的RDBMS? –

+0

也許向我們展示您使用的是什麼查詢,並向我們展示'explain plan',以便我們可以給您提供如何改進查詢的建議 –

+0

這是一個SQL Server數據庫。 –

回答

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

標準SQL,適用於大多數現代RDBMS(包括SQL Server和Oracle)。

編輯順便說一下,如果你想了解更多:MSDN ref. for OVER