限制对属性最大值的查询



我有一个包含这些列和值的模型Teststep

+----------+----------+---------------+----------+
|   name   | sequence | inner_sequnce | revision |
+----------+----------+---------------+----------+
| Step A   |        1 |             1 |        1 |
| Step B   |        1 |             2 |        1 |
| Step B-2 |        1 |             2 |        2 |
| Step C   |        1 |             3 |        1 |
| Step D   |        2 |             1 |        1 |
+----------+----------+---------------+----------+

现在,我希望所有测试步骤都使用sequence 1,但只能使用最高版本。所以在这种情况下,它将包括 Step AStep B-2Step C

使用

正确的sequence获取测试步骤的查询很容易:

Teststep.where(sequence: 1)

但是我如何确保只返回Step B-2而不是Step B或同时返回Step B-2Step B

你想要创建一个子查询并使用聚合:

SELECT * FROM teststeps
WHERE
   teststeps.sequence = 1
AND 
   teststeps.revision = (SELECT MAX(teststeps.revision) WHERE teststeps.sequence = 1)

坏消息是,如何执行此操作的确切细节取决于使用的RDBMS。

在 Rails 中,你可以执行以下操作:

Teststep.where(sequence: 1)
        .where(revision: Teststep.where(sequence: 1).maximum(:revision))

最新更新