返回整个会话符合条件的ID

时间:2018-09-18 17:43:47

标签: sql presto

我的桌子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

1 个答案:

答案 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))