问题:
我有一个表,它在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/

10-13 07:50