在PostgreSQL中使用.select,.unique和.order

时间:2013-07-16 18:34:36

标签: ruby-on-rails ruby activerecord

我在模特组织者和活动之间有一对多的关系。

我希望得到最近更新活动的五位组织者。

    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。

1 个答案:

答案 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;