2013-04-08 19 views
3

我有一個表是這樣的:如何獲得SQL Server中的最新行

id  start  end 
------------------------------   
1  2013-04-08 null 
2  2013-04-01 null 
2  2012-04-01 2013-04-01 
3  2012-04-01 2013-04-01 
4  2012-04-01 2013-04-01 
4  2011-04-01 2012-04-01 

我想這樣一個表:

id start  end 
-----------------------------    
1 2013-04-08 null 
2 2013-04-01 null 
3 2012-04-01 2013-04-01 
4 2012-04-01 2013-04-01 

,所以我希望得到一個排的每個ID與最新的信息。

我該如何編寫查詢?

+0

爲什麼我downvoted這個問題:http://meta.stackexchange.com/a/149138/133242 – 2013-04-08 17:03:30

+0

@MattBall我有這個問題,不知道如何做到這一點作爲一個新的SQL初學者。所以沒有研究努力? – 2013-04-08 17:04:39

回答

4

SQL Server支持Common Table ExpressionWindowing FunctionsROW_NUMBER()對每個組的記錄進行排名,這是篩選記錄的基礎。

WITH records 
AS 
(
    SELECT ID, [Start], [End], 
      ROW_NUMBER() OVER(PARTITION BY ID ORDER BY [START] DESC) rn 
    FROM TableName 
) 
SELECT ID, [Start], [End] 
FROM records 
WHERE rn = 1 
1

作爲跟進JW的回答,你也可以像這樣做,這在我的眼睛更容易弄清楚:

SELECT * FROM (SELECT * FROM table1 ORDER BY start DESC) AS temp GROUP BY id; 

SELECT * FROM (SELECT * FROM table1 ORDER BY start DESC) AS temp GROUP BY id ORDER BY id; 

這會做同樣的事情,所以它取決於你如何喜歡查詢,最後一個查詢按ID排序結果,而第一個查詢不是。

http://sqlfiddle.com/#!2/885cd/1