我有一个存储对象的数据库。我有以下(简化的)架构
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}
关键是:我怎样才能找到代号最接近(但不超过)给定代号的每个唯一对象的行?然后我可以执行过滤后步骤以删除 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
关于c# - 版本控制算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332558/