这是一些模拟数据:
visitor_id,channel,timestamp,order_id,session
100,A,1,,1
100,B,2,,1
100,A,3,,1
100,B,4,1,1
100,B,5,,2
100,B,6,,2
100,B,7,2,2
100,A,8,,3
100,A,9,,3
访客将通过渠道进入站点,并最终下订单(创建order_id)。许多访问者从来没有订购过,但我仍然想将他们的会话分组在一起(例如,确定什么是他们的第一个渠道)。最后一列是解决该问题的一个示例。
在PostgreSQL中创建有效的声明式语句是什么?有没有比我建议的更好的解决方案?
您想将值组合到一个订单中。一种方法是为每行分配一个分组ID,例如给定时间之前的订单数。这可以通过相关子查询来完成:
select md.*,
(select count(md2.order_id)
from mockdata md2
where md2.visitor_id = md.visitor_id and
md2.timestamp < md.timestamp
) as session
from mockdata md;
这也可以使用累计计数来完成:
select md.*,
count(order_id) over (partition by visitor_id
order by timestamp
rows between unbounded preceding and 1 preceding
) as session
from mockdata md;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句