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

时间:2010-11-19 05:42:16

标签: sql ruby-on-rails activerecord

我遇到了一些我不知道如何处理活动记录(实际上我不能确切地说如何用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有没有合理的方法呢?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

使用CTE的ROW_NUMBER()函数OVER(由recipe1 ORDER BY修订分区)。

有关详细信息,请访问此页:

http://blog.sqlauthority.com/2009/08/08/sql-server-multiple-cte-in-one-select-statement-query/