如何按相关记录的最大值对表进行排序?

时间:2013-05-11 02:46:28

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

我有一个有很多会议的客户模型。

class Client < ActiveRecord::Base

  has_many :meetings

end

class Meeting < ActiveRecord::Base

  belongs_to :client

end

我想生成一个ActiveRecord查询,它将返回按最近一次会议的顺序排序的客户端(由meeting_time列确定),但不知道如何执行此操作。我显然需要以某种方式加入表格,但我不知道如何在AR中生成合适的子查询。如何为每个客户编写仅包含1个会议的联接,特别是最近的会议(即给定meetings.client_id的meetings.meeting_time的最高值)。我的数据库是PostgreSQL。

我之前遇到类似的问题,与他们挣扎,显然没有从过程中学到很多东西。指向一个好资源的指针,以了解这些情况也将不胜感激。

1 个答案:

答案 0 :(得分:8)

这样的东西?

Client.joins(:meetings).group('clients.id').order('max(meetings.meeting_time) DESC')

这将:

  1. 抓住客户
  2. 加入他们的会议
  3. 客户分组(id)
  4. 现在我们可以使用max(meetings.meeting_time)这是每个客户的最新会议
  5. 然后按最近的会议时间按降序对客户进行排序