如何在SQL Server中获取最新的行

3

I have a table like this:

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的最新信息,您该如何编写查询?

我为什么要对这个问题进行负评:http://meta.stackexchange.com/a/149138/133242 - Matt Ball
@MattBall,我作为一个新手SQL,有一个问题不知道该怎么做。所以没有进行过研究吗? - Jackson Tale
2个回答

4

SQL Server 支持 Common Table ExpressionWindowing Functions。使用 ROW_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
作为对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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接