2012-03-27 17 views
0

私は時間の経過とともに商品価格の変化を記録するために使用するテーブルを用意しています。 私は、アイテムのセット全体(重複なし)と最新の価格を取得するメソッドを作成しようとしています。RoR最新の「列で区別する」行を選択する

これは、item_idが2の行が自分のテーブルの中に数回出現する可能性があり、item_idが3の行がテーブルなどの中に複数回出現する可能性があることを意味します。彼らの最新の価格

私は可能な限りItem.find_by_sql()を使わずに道を見つけようとしています。それは作業を行い

SELECT * FROM 
(SELECT * FROM item_logs 
ORDER BY created_at DESC) inner_table 
GROUP BY item_id 

が、このようにそれを行うには間違っていると思われる現在の実装が必要であるため、私は、私はこれを行うにはよりエレガントな方法を探しています推測:

は現在、私は次のことを持っています私は非常に柔軟性のないfind_by_sqlを使用しています。

答えて

0

わからない、それは任意のより良いですが、使用になり、別のオプションが加わり:

ItemLog.joins(
    'join (select item_id, max(created_at) as created_at from item_logs group by 1) 
    as i on i.item_id = item_logs.item_id and i.created_at = item_logs.created_at' 
) 

あなたfind_by_sqlソリューションよりも長く、データベース上のより高価なクエリのかもしれないが、アクティブレコード関係として結果を保持します他のメソッドをチェーンすることができます。

関連する問題