2011-08-19 5 views
1

je donne les résultats suivants, tableau simplifié:activerecord obtenir plusieurs enregistrements les plus récents

| 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 | 

Maintenant, je suis en train d'obtenir tous les documents pour obtenir une liste des commandes, mais seulement le dernier pour chaque ORDER_ID

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

La variable ids est générée par une sous-requête, disons que c'est "1, 2" pour le moment. La déclaration ci-dessus devrait retourner les enregistrements 2 et 4. Des idées?

+0

Quelle langue utilisez-vous? – J0HN

+0

J'utilise Ruby/Rails, j'ai mis à jour la liste des tags ... –

+0

Quels sont les éléments qui retournent? – Serabe

Répondre

0

Trouvez un moyen de placer les ID dans un tableau. Par ailleurs, cela ne fonctionnera que pour les Rails 3 et supérieurs.

+0

Cela me donnerait tous les quatre enregistrements, classés par date alors que je n'ai besoin que des enregistrements 2 et 4 ... –

0

Essayez ce champ (i remplacer your_table avec le nom de la table appropriée):

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

Maintenant YourModel.top_orders devrait faire la chose

0
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") 
Questions connexes