为了需要进行群组分析,我正在尝试获取每个客户的下一步操作(取消订阅、升级、降级......)
我有一个包含以下数据的月度快照:
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
如您所见,该操作仅在完成的月份才知道,在 01-01-2012 月份我们还不知道客户在 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”。
我正在使用甲骨文。