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

前端之家收集整理的这篇文章主要介绍了sql – 在多个组中的每组记录中选择最新和特定的版本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题:
我有一个在foo中记录数据行的表.每次更新行时,都会插入一个新行以及修订版本号.桌子看起来像:
id  rev field
1   1   test1
2   1   fsdfs
3   1   jfds
1   2   test2

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

有没有人知道一种有效的方法查询最新版本的行,以及一个具体的记录版本?例如,对于rev = 2的查询将返回2,3和4行(而不是替换的第1行),而对于rev = 1的查询会产生具有rev = 1的那些行,并且在重复的ids的情况下,选择具有较高版本号的数据(记录:1,2,3).

我实际上不确定这是否可能在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)

这可能不是最有效的方式,但现在我无法想像出一个更好的方法.

猜你在找的MsSQL相关文章