我有一个模型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
?
答案 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))