我的桌子T就是这样
id event category request
1 click a 1
2 click b 2
1 click b 2
1 cart_add 3
3 click a 1
3 card_add 2
3 purchase 3
2 click c 1
2 card_add 3
1 purchase 4
,我想返回单击了b类产品并将b类产品添加到他们的购物车的访客,以及在此之后进行购买的访客。因此,添加b类产品的人和购买b类产品的人都可以。
我的问题基本上是查询会话。它们通常不按顺序排列,而我正在使用的实际表是一百万行,因此排序非常耗时。
找到满足上述条件的所有ID是否有一个不错的技巧,还是仅使用R或Python进行分析会更容易?更具体地说,从上表中,我将返回
purchased added
1 1
null 2
答案 0 :(得分:0)
假设id
标识一个会话。这会找到执行全部三个操作的会话:
select id
from t
where (event = 'click' and category = 'b') and
(event = 'cart_add') and
(event = 'purchase')
group by id
having count(distinct event) = 3;
如果您需要晚于其他两个购买,请添加:
max(case when event = 'purchase' then request end) > greatest(min(case when event = 'click' then request end), min(case when event = 'card_add' then request end))