我正在尝试在 Rails 中进行队列分析查询,但在使用按最后操作日期分组的正确方法时遇到了麻烦。
我想以如下数据行结束:http ://www.quickcohort.com/
count first_action last_action
适用于去年注册的所有用户。first_action
并被last_action
截断到最近的月份。
获得按 分组的计数first_action
很容易,但是当我尝试将其扩展为包括last_action
我遇到的
ActiveRecord::StatementInvalid: PGError: ERROR: aggregates not allowed in GROUP BY clause
这是我到目前为止所拥有的
User
.select("COUNT(*) AS count,
date_trunc('month', users.created_at) AS first_action,
MAX(date_trunc('month', visits.created_at)) AS last_action # <= Problem
")
.joins(:visits)
.group("first_action, last_action") # TODO: Subquery ?
.order("first_action ASC, last_action ASC")
.where("users.created_at >= date_trunc('month', CAST(? AS timestamp))", 12.months.ago)
访问表跟踪用户对站点的所有访问。使用最新访问作为最后一个操作似乎应该很容易,但我在将其形成 SQL 时遇到了麻烦。
如果有更好的方法,我也愿意接受其他解决方案,但似乎单个 SQL 查询的性能最高。