【发布时间】:2020-04-12 18:54:10
【问题描述】:
无法找出处理此类查询的最有效方法。
我有 3 个模型:
User、Location 和 Query
# User
has_many :queries
# Query
belongs_to: :user
belongs_to :location
我将user.queries 用于统计信息,因为它包含额外的元数据,如果它们碰巧执行相同的查询,location_id 列上有很多重复项,但每个都有不同的元数据,因此它被记录为单独的记录。
我想构建一个所谓的history,它从User.queries 中选择最近不同的location_id,并按id 或created_at 的顺序返回它们,同时仍将其保留为ActiveRecord 集合和不将其转换为数组,以便对其进行迭代以进行渲染。
user.queries.select(:location_id).distinct 已接近但未排序。
以下原始 SQL 似乎正在工作,但有没有办法用 ActiveRecord 编写它
queries.find_by_sql("
SELECT location_id, created_at
FROM (SELECT DISTINCT ON (queries.location_id) *
FROM queries
ORDER BY queries.location_id, queries.created_at DESC) queries
ORDER BY queries.created_at DESC
LIMIT 20
")
【问题讨论】:
标签: ruby-on-rails ruby postgresql