c# - 版本控制算法

标签 c# sql algorithm

我有一个存储对象的数据库。我有以下(简化的)架构

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/

相关文章:

c# - 一种计算重定向 URL 的方法

c# - 将多个动态生成的正则表达式缓存到磁盘

c# - Umbraco RelationService.GetByParentId(memberId) 慢。每个项目触发两个查询

C# 等效于 PHP 动态方法调用

mysql - 大查询会影响性能

c++ - 在两个 vector 之间交换值,使两个 vector 的 max_elements 之和最小

java - 在 arraylist 中查找字符串的松散匹配

sql - Group by/Distinct Sequelize 查询功能

mysql - 在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?

c++ - 通过选择部分或全部字符生成所有排列的算法