一尘不染

为多个组选择每组记录中的最新版本和特定版本

sql

问题:
我有一个表,其中记录了数据行foo。每次更新该行时,都会插入一个新行以及修订号。该表如下所示:

id  rev field
1   1   test1
2   1   fsdfs
3   1   jfds
1   2   test2

请注意,表中的最后一条记录是第一行的较新版本。

有谁知道查询行的最新版本以及记录的特定版本的有效方法?例如,查询rev=2会返回第2、3和4行(虽然不是替换的第一行),而查询会rev=1产生那些rev
<= 1的行,并且如果ID重复,则修订号较高的那一行是选择(记录:1、2、3)。

我实际上不确定在SQL Server中是否还可以…

我不希望以迭代方式返回结果。


阅读 149

收藏
2021-03-17

共1个答案

一尘不染

要仅获取最新修订,请执行以下操作:

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)

这可能不是执行此操作的最有效方法,但是现在我无法找到一种更好的方法来执行此操作。

2021-03-17