我有一个带有author_id
字段的书籍表。
我想获取一组书籍,其中仅包含每位作者的一本书。具有最新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 实现的方法来获得它?
更新 Postgres 的不错的解决方案:
books.unscoped.select('DISTINCT ON(author_id) *').order('author_id').order('updated_at DESC')
但!仍然存在问题 - 结果author_id
首先排序,但我需要updated_at
在相同的author_id
-s 内排序(例如,查找前 10 位最近的书籍作者)。
而且 Postgres 不允许您更改查询中的ORDER BY
参数顺序DISTINCT
:(