如何在此Rails查询中按created_at排序

时间:2013-02-06 08:48:15

标签: ruby-on-rails postgresql rails-activerecord

鉴于以下AR查询将邮件检索为会话(按发件人ID分组),如何首先显示最近的邮件?此查询显示已发送的第一条消息,但不显示最新消息。

User.find(1).messages.select("DISTINCT ON (messages.sender_id(created_at)) * ")
  .where("messages.sender_id = (?)",friend.id)
  .group("messages.sender_id, messages.updated_at, messages.id, messages.user_id, messages.sent, messages.read")

我在这里添加订单子句的位置和方式有点遗失。

1 个答案:

答案 0 :(得分:0)

ORDER BYDISTINCT无法协同工作。

正确的方法是改为group byorder by

最大的问题是SELECT *无法与GROUP BY一起使用,因此您必须放弃以下其中一项:

  • GROUP BY
  • DISTINCT
  • ORDER BY

一个选项是您可以更改SELECT *以手动列出所有列,而不希望分组的列可以放在min()之类的聚合中(这是我在SQL中执行的操作)查询。

我不使用ORM,但希望这会让你知道如何做esp。因为你已经非常接近SQL了。