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 查询执行此操作的最佳方法是什么,以便它可以用于不同类型的查询,例如我只想返回某些列?
;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)