author_id
フィールドを持つブックテーブルがあります。ユニークフィールド値でグループ化された最新の行を取得します
すべての著者の書籍が1つだけ含まれている書籍の配列を取得したいと思います。最新のupdated_at
フィールドを持つもの。
PostgresのBooks.all.group('author_id')
のような単純なアプローチの問題は、GROUP BY
ブロックにすべての要求フィールドが必要なことです。 (https://stackoverflow.com/a/6106195/1245302を参照してください)
しかし、すべてのブックオブジェクトを作成者ごとに取得する必要があります。最近のものは、他のすべてのフィールドを無視します。 DBMSが必要とする行を正確に見つけるのに十分なデータがあると思われます。 少なくとも私はGROUP BY
ブロック内の他のフィールドなしで自分自身でそれを行うことができます。 :)
Rails 3 + Postgres(バージョン< 9)またはSQL実装 は独立した方法で入手できますか? Postgresのための
UPDATE ニースソリューション:
books.unscoped.select('DISTINCT ON(author_id) *').order('author_id').order('updated_at DESC')
しかし!まだ問題が残っています - 結果は最初にauthor_id
でソートされていますが、同じ -sの中にupdated_at
でソートする必要があります(最近のトップ10の著者を見つけるには)。
そして、Postgresはあなたが、私はRailsのを知って、うまくいけば、あなたが道にあなたを得るのを助けるしたいもののためにあなたのSQLを示していないDISTINCT
クエリ:(
スピーキングを使用する - ですそれはPostgreSQLまたはあなたが探しているルビーの配列ですか? – vyegorov
私は、Railsモデルオブジェクトの配列が必要です。PostgreSQL 8.4 – aristofun