我有一个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