给定以下架构

class User
  has_many :page_views
  #[id]
end

class Page
  has_many :page_views
  #[id]
end

class PageView
  belongs_to :user
  belongs_to :page
  #[id, created_at, updated_at]
end


如何按给定的日期查询给定页面,所有用户最近的页面浏览量。每个用户一行,仅显示其最近的视图。

最佳答案

您希望具有特定page_id的每个user_id具有最大created_at的PageView。这是此查询在SQL中的表示形式:

SELECT max(created_at) AS last_visit, page_views.*
FROM page_views
WHERE (page_id = 1)
GROUP BY user_id
ORDER BY last_visit DESC


在Rails 3中,您可以这样编写:

Page.first.page_views.group(:user_id).select('max(created_at) AS last_visit, page_views.*').order('last_visit DESC')

10-06 06:16