我有一个存储对象的数据库.我有以下(简化)架构 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 SQLSELECT 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