我在模特组织者和活动之间有一对多的关系。
我希望得到最近更新活动的五位组织者。
Event.order('updated_at asc').
where(organizer_id: [1,2,3,4,5,6,7,8,9]).
select(:organizer_id).uniq.limit(5)
上面的代码在SQLite3中运行良好,但在PostgreSQL中抛出了Heroku的以下错误:
for SELECT DISTINCT, ORDER BY expressions must appear in select list
如何使查询在PG中工作,例如使用错误消息中建议的方法?
如果可能的话,我希望有一个尽可能多的ActiveRecord解决方案,而不是纯SQL。
答案 0 :(得分:3)
您按updated_at
排序,但仅选择organizer_id
。 Postgres要求ORDER子句中使用的字段在SELECT子句中。您需要将updated_at
添加到select
列表中。
在SQL中,您现在拥有:
SELECT organizer_id FROM events WHERE ... ORDER BY updated_at asc;
你需要:
SELECT organizer_id, updated_at FROM events WHERE ... ORDER BY updated_at asc;