我有一个包含这些列和值的模型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 A
、 Step B-2
和 Step C
。
正确的sequence
获取测试步骤的查询很容易:
Teststep.where(sequence: 1)
但是我如何确保只返回Step B-2
而不是Step B
或同时返回Step B-2
和Step 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))