限制查询属性的最高值

时间:2017-11-07 13:31:13

标签: ruby-on-rails activerecord

我有一个模型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

1 个答案:

答案 0 :(得分:3)

您想要创建子查询并使用聚合:

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))