我有一個author_id
字段的書籍表。獲取按uniqe字段值分組的最新行
我想獲取一組書籍,其中只包含每個作者的一本書。最新的updated_at
字段。
在Postgres上使用直接方法(如Books.all.group('author_id')
)的問題是它需要GROUP BY
塊中的所有請求字段。 (請參閱https://stackoverflow.com/a/6106195/1245302)
但我需要爲每個作者獲取所有Book對象,最近的一個忽略所有其他字段。 在我看來,有足夠的數據讓DBMS準確找到我想要的行,至少我可以在GROUP BY
塊中自己沒有任何其他字段。 :)
是否有任何簡單的Rails 3 + Postgres(版本< 9)或SQL實現 獨立的方式來獲取?
UPDATE Postgres的很好的解決方案:
books.unscoped.select('DISTINCT ON(author_id) *').order('author_id').order('updated_at DESC')
BUT!仍然存在問題 - 結果首先排序爲author_id
,但我需要在相同的author_id
-s內找出排序方式updated_at
(發現前10位最近的書籍作者)。
和Postgres不允許你改變的ORDER BY
參數順序DISTINCT
查詢:(
說起_array_ - 是它是PostgreSQL還是你正在尋找的ruby數組? – vyegorov 2012-04-13 19:35:46
我只需要Rails模型對象的數組,PostgreSQL 8.4 – aristofun 2012-04-14 16:15:31