问题:
我有一个表,它在foo
中记录数据行。每次更新该行时,都会插入一个新行以及修订号。该表如下所示:
id rev field
1 1 test1
2 1 fsdfs
3 1 jfds
1 2 test2
请注意,表中的最后一条记录是第一行的较新版本。
有谁知道查询行的最新版本以及记录的特定版本的有效方法?例如,查询
rev=2
将返回第2、3和4行(尽管不是替换的第一行),而查询rev=1
则生成具有rev 我实际上不确定在SQL Server中是否还可以...
我不希望以迭代方式返回结果。
最佳答案
要仅获取最新修订:
SELECT * from t t1
WHERE t1.rev =
(SELECT max(rev) FROM t t2 WHERE t2.id = t1.id)
要获得特定的修订版,在这种情况下为1(并且如果某个项目没有该修订版,则为下一个最小的修订版):
SELECT * from foo t1
WHERE t1.rev =
(SELECT max(rev)
FROM foo t2
WHERE t2.id = t1.id
AND t2.rev <= 1)
这可能不是执行此操作的最有效方法,但是现在我无法找到一种更好的方法来执行此操作。
关于sql - 为多个组选择每组记录中的最新版本和特定版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9430743/