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クエリが最もパフォーマンスが高いようです。