当前位置 : 主页 > 编程语言 > c语言 >

c# – 版本控制算法

来源:互联网 收集:自由互联 发布时间:2021-06-25
我有一个存储对象的数据库.我有以下(简化)架构 CREATE TABLE MyObjects( UniqueIdentifier Id; BigInt GenerationId; BigInt Value; Bit DeleteAction;) 每个对象都有一个唯一标识符(“Id”)和一个(一组)属性(“V
我有一个存储对象的数据库.我有以下(简化)架构

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
网友评论