这个问题是this的扩展。 用户希望对保留进行队列分析。 数据采用以下格式:
timestamp action user id
--------- ------ -------
2015-05-05 12:00 homepage 1
2015-05-05 12:01 product page 1
2015-05-05 12:02 homepage 2
2015-05-05 12:03 checkout 1
必要的输出如下:
signup_date user_period retained_users
----------- ----------- --------------
2015-05-05 0 80
2015-05-05 1 60
2015-05-05 2 40
2015-05-05 3 20
2015-05-06 0 100
2015-05-06 1 80
2015-05-06 2 40
2015-05-06 3 20
答案是由同一个人想出来的,如下所示。
WITH
users AS (
SELECT
user_id,
date_trunc('day', min(timestamp)) as activated_at
from table
group by 1
)
,
events AS (
SELECT user_id,
action,
timestamp AS occurred_at
FROM table
)
SELECT DATE_TRUNC('day',u.activated_at) AS signup_date,
TRUNC(EXTRACT('EPOCH' FROM e.occurred_at - u.activated_At)/(3600*24)) AS user_period,
COUNT(DISTINCT e.user_id) AS retained_users
FROM users u
JOIN events e
ON e.user_id = u.user_id
AND e.occurred_at >= u.activated_at
WHERE u.activated_at >= getdate() - INTERVAL '11 day'
GROUP BY 1,2
ORDER BY 1,2
在上述情况下,据我所知,如果用户只是执行任何单个事件,他/她将被视为有效。并将成为retain_users的一部分。
但是,在我的场景中......我希望决定谁是活跃用户..
因此,活跃用户可以是查看5个页面或查看至少3个产品页面或将一个产品添加到购物车或进行结帐等等的人。
我该如何做这样的事情......
我想事件AS(..)部分将不得不改变..
真心感谢任何帮助。
由于