如何根据序列 ID 选择最近更新的行

Dan*_*Dan 2 sql-server-2008-r2

我有一个主 ID 列,但对于该行的每次编辑,还有一个序列 ID 列(初始行为 1,每次编辑都会增加序列 ID,但主 ID 列保持不变)。在查询中仅选择最新(最大序列 ID)行的最佳方法是什么?我目前以编程方式执行此操作,但想知道是否有办法在使用 SQL 的一个查询中完成所有操作。

样本数据:

Person_ID   Person_Seq_ID   Person_Name   Person_Favorite_Color
---------   -------------   -----------   ---------------------
1           1               John Doe      Green
1           2               John Doe      Turquoise
2           1               Jane Doe      Blue
3           1               Mike Smith    Red
Run Code Online (Sandbox Code Playgroud)

假设我有这个查询:

SELECT * FROM Person
Run Code Online (Sandbox Code Playgroud)

我只希望John Doe返回最近的行(在本例中为序列 ID #2),并且还应返回 Jane 和 Mike 的单行。

预期结果:

Person_ID   Person_Seq_ID   Person_Name   Person_Favorite_Color
---------   -------------   -----------   ---------------------
1           2               John Doe      Turquoise
2           1               Jane Doe      Blue
3           1               Mike Smith    Red
Run Code Online (Sandbox Code Playgroud)

使用一个 SQL 查询执行此操作的最佳方法是什么,以便它可以用于不同类型的查询,例如我只想返回某些列?

Aar*_*and 6

;WITH x AS
(
  SELECT Person_ID, Person_Seq_ID, Person_Name, Person_Favorite_Color,
    rn = ROW_NUMBER() OVER (PARTITION BY Person_ID ORDER BY Person_Seq_ID DESC)
  FROM dbo.Person -- always use schema prefix
)
SELECT Person_ID, Person_Seq_ID, Person_Name, Person_Favorite_Color
  FROM x WHERE rn = 1
  ORDER BY Person_ID;
Run Code Online (Sandbox Code Playgroud)