2013-07-02 60 views
3

請考慮下面的表...選擇MAX日期加上ID值

DECLARE @tmp TABLE 
    (
    ID int, 
    userID int, 
    testID int, 
    someDate datetime 
    ) 

...包含以下值:

INSERT INTO @tmp (ID, userID, testID, someDate) VALUES (1, 1, 50, '2010-10-01') 
INSERT INTO @tmp (ID, userID, testID, someDate) VALUES (2, 1, 50, '2010-11-01') 
INSERT INTO @tmp (ID, userID, testID, someDate) VALUES (3, 1, 50, '2010-12-01') 
INSERT INTO @tmp (ID, userID, testID, someDate) VALUES (4, 2, 20, '2010-10-01') 
INSERT INTO @tmp (ID, userID, testID, someDate) VALUES (5, 2, 30, '2010-11-01') 
INSERT INTO @tmp (ID, userID, testID, someDate) VALUES (6, 2, 20, '2012-11-01') 

我需要檢索的最大日期爲每個用戶ID/testID組合的值,以及附帶的ID值。結果應該是:

ID userID testID someDate 
------------------------------- 
3 1  50  2010-12-01 
5 2  30  2010-11-01 
6 2  20  2012-11-01 

當我嘗試以下查詢時,結果集變得不正確,並顯示所有行。我不能從GROUP BY子句中省略ID,因爲它會導致錯誤。任何人都可以幫忙嗎?爲了獲得這些價值,似乎很囉嗦地加入表格。

SELECT ID, userID, testID, MAX(someDate) 
FROM @tmp 
GROUP BY testId,userID,ID; 

http://www.sqlfiddle.com/#!6/d41d8/5219

+1

看到類似的問題的回答上DBA.Stackexchange http://dba.stackexchange.com/questions/1002/how-to-get-最大行 –

回答

4

請嘗試:

select * from (
    select 
     *, 
     ROW_NUMBER() over (partition by userID, testID order by SomeDate desc) Rnum 
    From @tmp 
)x where Rnum=1 
+0

非常感謝! – EvilDr

+0

謝謝...不客氣:) – TechDo