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

c# – 版本控制算法

发布时间:2020-12-16 01:29:19 所属栏目:百科 来源:网络整理
导读:我有一个存储对象的数据库.我有以下(简化)架构 CREATE TABLE MyObjects( UniqueIdentifier Id; BigInt GenerationId; BigInt Value; Bit DeleteAction;) 每个对象都有一个唯一标识符(“Id”)和一个(一组)属性(“Value”).每次更改对象的属性值时,我都会在此
我有一个存储对象的数据库.我有以下(简化)架构

CREATE TABLE MyObjects
(
  UniqueIdentifier Id;
  BigInt           GenerationId;
  BigInt           Value;
  Bit              DeleteAction;
)

每个对象都有一个唯一标识符(“Id”)和一个(一组)属性(“Value”).每次更改对象的属性值时,我都会在此表中输入一个新行,其中包含一个新生成ID(“GenerationId”,它会单调递增).如果删除了一个对象,那么我通过将“DeleteAction”位设置为true来记录这一事实.

在任何时间点(生成),我想检索所有活动对象的状态!

这是一个例子:

Id    GenerationId Value  DeleteAction
1        1          99       false
2        1          88       false
1        2          77       false
2        3          88       true

世代的对象是:

1: 1 {99},2 {88}
  2: 1 {77},2 {88}
  3: 1 {77}

关键是:如何找到每个唯一对象的行,其中生成ID最接近(但不超过)给定的生成ID?然后,我可以执行后过滤步骤以删除DeleteAction字段为true的所有行.

解决方法

这适用于MS SQL

SELECT id,value
FROM Myobjects
INNER JOIN ( 
     SELECT id,max(GenerationID) as LastGen 
     FROM MyObjects
     WHERE GenerationID <= @Wantedgeneration
     Group by ID)
    On GenerationID = LastGen
WHERE DelectedAction = false

(编辑:李大同)

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

    推荐文章
      热点阅读