【问题标题】:How can I sort by created_at on this Rails query如何在此 Rails 查询中按 created_at 排序
【发布时间】:2013-02-06 08:48:14
【问题描述】:

鉴于以下 AR 查询将消息检索为对话(按 sender_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")

我有点不知道在哪里以及如何在此处添加订单子句。

【问题讨论】:

  • 您使用哪种语言编写查询?这不是普通的 SQL
  • 抱歉,忘记在问题中添加rails标签。
  • 最后尝试.order(created_at: "DESC")
  • 这似乎行不通。
  • .order("created_at desc") ?

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


【解决方案1】:

ORDER BY 和 DISTINCT 不能一起工作。

正确的做法是使用group by 和order by。

最大的问题是SELECT * 不适用于GROUP BY,因此您必须放弃以下之一:

  • GROUP BY
  • DISTINCT
  • ORDER BY

一个选项是您可以更改 SELECT * 以手动列出所有列,并且可以将那些不希望被分组的列放在像 min() 这样的聚合中(这是我在 SQL 查询中所做的。

我不使用 ORM,但希望这会让你知道该怎么做,尤其是。因为无论如何您已经非常接近 SQL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2014-09-30
    • 2011-12-22
    相关资源
    最近更新 更多