У меня есть таблица с (среди прочего) именем и рангом. Я хотел бы вернуть набор всех уникальных имен, но для каждого возвращенного имени я хотел бы выбрать строку с самым высоким рангом. Это просто с двумя вложенными инструкциями SELECT:
SELECT * FROM (SELECT * FROM foo ORDER BY rank DESC) AS ordered GROUP BY name
MySQL получает первое "совпадение" для каждого имени, которое (из-за более раннего ORDER BY) всегда будет самым высоким.
Теперь, если я хочу подключиться к этой таблице с ActiveRecord, я немного растерялся. Я мог бы просто бросить вышеупомянутое в find_by_sql
, но это просто кажется грязным. Я пробовал что-то вроде
result = foo.all
result.delete_if do |item|
isOutranked = false
result.each do |row|
if (row.name == item.name) and (row.rank > item.rank) then isOutranked = true
end
isOutranked
end
Я думаю, что работает , но все равно кажется, что должен быть лучший путь. Решение этой проблемы с помощью хитрости ActiveRecord или более элегантной манипуляции с массивами приветствуется!