我有下表:
Table: users
id | created_ts | username_str
---------------------------------
Table: activity
user_id | created_ts | activity_descr_str
---------------------------------
Table: purchase_orders
id | user_id | created_ts | price
users.id 是外键 user_id 的主键。 我想知道有多少用户在首次购买之前进行过 <= 3 次事件。但仅适用于日期 X(例如“2016-08-01”)之后新加入的用户。
非常感谢。
编辑,2016-10-06:
这是我尝试过的:
SELECT COUNT(DISTINCT user_id)
FROM (SELECT po.user_id
FROM purchase_orders po
LEFT JOIN activity a USING (user_id)
JOIN users u ON u.id = po.user_id
WHERE DATE (po.created_ts) >= '2016-08-01'
AND a.created_ts < po.created_ts
GROUP BY 1
HAVING COUNT(a.created_ts) <= 3)
最佳答案
您只需将逻辑分成几个部分:
- 获取每个用户的首次订购日期。
- 过滤掉年龄过大的用户。
- 参加事件,注意日期。
- 计算每个用户的事件数量。
- 过滤并再次计数。
因此,一种方法是这样的查询:
select count(*)
from (select user_id, count(a.user_id) as num_activities
from (select po.user_id, min(created_ts) as mints
from purchase_orders po
group by po.user_id
having min(created_ts) >= '2016-08-01'
) o left join
activity a
on a.user_id = o.user_id and a.created_ts < o.created_ts
group by user_id
) u
where num_activities <= 3;
关于SQL/Redshift : Querying user behaviour before first purchase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39876520/