加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:48:59 所属栏目:MsSql教程 来源:网络整理
导读:问题: 我有一个在foo中记录数据行的表.每次更新行时,都会插入一个新行以及修订版本号.桌子看起来像: id rev field1 1 test12 1 fsdfs3 1 jfds1 2 test2 请注意,在表中最后一条记录是第一行的较新版本. 有没有人知道一种有效的方法来查询最新版本的行,以及一
问题:
我有一个在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)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读