如何获取sql server中的最新行

时间:2013-04-08 17:01:38

标签: sql 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都能获得一行,并提供最新信息。

如何编写查询?

2 个答案:

答案 0 :(得分: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 :(得分:1)

作为对J W答案的跟进,您也可以这样做,在我看来这更容易理解:

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