问题: 我有一个表,其中记录了数据行foo。每次更新该行时,都会插入一个新行以及修订号。该表如下所示:
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)。
rev=2
rev=1
我实际上不确定在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)
这可能不是执行此操作的最有效方法,但是现在我无法找到一种更好的方法来执行此操作。