一尘不染

使用activerecord时,如何根据字段的最高值选择记录?

sql

我遇到了我不希望做的事情,我不知道该如何处理活动记录(实际上我无法确切地说出如何使用sql来做)。我想根据某个字段的最高值以及其他一些条件来选择记录。以下是一些伪造的东西,它们解释了我的情况。给出以下记录:

id:1 | name:recipe1 | saved:true  | revision:1
id:2 | name:recipe1 | saved:false | revision:2
id:3 | name:recipe1 | saved:true  | revision:3
id:4 | name:recipe1 | saved:false | revision:4
id:5 | name:recipe2 | saved:true  | revision:1
id:6 | name:recipe2 | saved:true  | revision:2
id:7 | name:recipe3 | saved:false | revision:1
id:8 | name:recipe4 | saved:true  | revision:1

我希望能够获取已保存的修订版本号最高的记录。这意味着ID为:3、6和8的记录

我的第一个本能是做某种子查询,该子查询在修订之类的东西上获得MAX。除此之外,我真的不知道该怎么做,因此我们将不胜感激。

编辑:

这是我想要的SQL:

SELECT id, name, MAX(revision) as "revision" FROM revisions WHERE saved = 1 GROUP BY name

现在,有什么合理的方法可以使用ActiveRecord做到这一点吗?


阅读 148

收藏
2021-03-10

共1个答案

一尘不染

Revision.maximum(:revision,:conditions => ["saved=1"],:group => 'name')
2021-03-10