コホート分析が必要なため、各顧客の次のアクション (サブスクリプション解除、アップグレード、ダウングレード...) を取得しようとしています。
次のデータを含む月次スナップショットがあります。
customer | month | last_action | last_action_date
1 01-01-2012 subscription 01-01-2012
1 02-01-2012 subscription 01-01-2012
1 03-01-2012 subscription 01-01-2012
1 04-01-2012 downgrade 04-01-2012
1 05-01-2012 downgrade 04-01-2012
1 06-01-2012 downgrade 04-01-2012
1 07-01-2012 unsubscription 07-01-2012
ご覧のとおり、アクションは実行された月にのみわかります。2012 年 1 月 1 日の時点では、顧客が 2012 年 4 月 1 日にダウングレードしたかどうかはまだわからないため、彼の使用行動を相対的に分析することはできません。彼の格下げ月に。退会についても同様です。
必要なデータセットは次のとおりです。
customer | month | downgrade_date | unsubscription_date
1 01-01-2012 04-01-2012 07-01-2012
1 02-01-2012 04-01-2012 07-01-2012
1 03-01-2012 04-01-2012 07-01-2012
1 04-01-2012 12-31-9999 07-01-2012
1 05-01-2012 12-31-9999 07-01-2012
1 06-01-2012 12-31-9999 07-01-2012
1 07-01-2012 12-31-9999 07-01-2012
last_value 分析関数を使用してサブスクリプション解除日を簡単に取得できましたが、ダウングレード日を取得する方法が見つかりませんでした。
ここに私のSQLクエリがあります:
SELECT month_id,
customer_id,
CASE
WHEN LAST_VALUE(last_action) OVER (PARTITION BY customer_id ORDER BY month_id RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) = 'unsubscription' THEN LAST_VALUE(last_action_date) OVER (PARTITION BY customer_id ORDER BY month_id RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
ELSE TO_DATE('99991231', 'yyyymmdd')
END unsubscription_date
FROM my_table
;
「downgrade_date」のように「次の」アクションの日付を取得する方法。
オラクルを使用しています。