Activerecord получить несколько самых последних записей - PullRequest
1 голос
/ 19 августа 2011

У меня есть следующая упрощенная таблица:

| id | order_id | created_at |  
| 1  |  1       | 2011-07-11 |  
| 2  |  1       | 2011-07-12 |  
| 3  |  2       | 2011-07-13 |  
| 4  |  2       | 2011-07-14 | 

Теперь я пытаюсь получить все записи для списка заказов, но только самую последнюю для каждого order_id

EdpuOrder.find(:all, :conditions => "edpu_orders.order_id IN (#{ids})", :order => "edpu_orders.created_at")

Переменная ids генерируется подзапросом, скажем, сейчас это «1, 2».Вышеприведенное утверждение должно вернуть записи 2 и 4. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 19 августа 2011

Попробуйте эту область (я заменяю your_table на правильное имя таблицы):

named_scope :top_orders, :from=>"(select * from your_table order by created_at desc) as tmp", :group => "order_id"

Теперь YourModel.top_orders должен сделать вещь

0 голосов
/ 19 августа 2011
EdpuOrder.where("(edpu_orders.order_id, edpu_orders.id) IN 
         (SELECT order_id, MAX(id) FROM edpu_orders GROUP BY order_id)").
order("created_at DESC")
0 голосов
/ 19 августа 2011

Найдите способ поместить идентификаторы в массив.

ids = [1, 2]
EdpuOrder.where(:order_id => ids).order(:created_at)

Кстати, это будет работать только для Rails 3 и выше.

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