с activerecord, как я могу выбрать записи, основанные на наибольшем значении поля? - PullRequest
1 голос
/ 19 ноября 2010

Я столкнулся с чем-то, что я не знаю, как сделать с активной записью (на самом деле я не мог точно сказать, как это сделать с 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

Я хотел бы иметь возможность получить записи с наибольшим номером ревизии, который был сохранен.Это означало бы записи с идентификаторами: 3, 6 и 8

Мой первый инстинкт - сделать какой-то подзапрос, который получает MAX при ревизии или что-то в этом роде.Кроме этого, я не имею ни малейшего понятия, как это сделать, поэтому любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ:

это SQL, который делает то, что я хочу:

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

Теперь, есть ли разумный способ сделать это с ActiveRecord?

Ответы [ 2 ]

6 голосов
/ 19 ноября 2010
Revision.maximum(:revision,:conditions => ["saved=1"],:group => 'name')
0 голосов
/ 19 ноября 2010

Используйте функцию CTE ROW_NUMBER () OVER (PARTITIONED BY recipe1 ORDER BY revision).

Для получения более подробной информации, пожалуйста, посетите эту страницу:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...