如何编写SQL查询筛选无中间页面的bounce来回跳转场景URL
解决方案
你现有查询已经完成了同一用户往返路径的匹配,仅需新增NOT EXISTS子句,过滤V1和V2两次访问时间区间内的其他访问记录即可,修改后的查询如下:
SELECT DISTINCT V1.url AS bounce_url FROM Visit V1 JOIN Visit V2 ON V1.uid = V2.uid AND V1.url = V2.src AND V1.src = V2.url AND V1.dt < V2.dt WHERE NOT EXISTS ( SELECT 1 FROM Visit V3 WHERE V3.uid = V1.uid AND V3.dt > V1.dt AND V3.dt < V2.dt )
- 新增的
NOT EXISTS子句逻辑:检查同一个用户,在V1的访问时间和V2的访问时间之间,是否存在其他访问记录,如果存在则当前匹配的往返路径不符合要求,会被过滤 - 如果你存储的日期仅精确到天、同一天内有多条访问记录,可以额外用你表中的
rev字段(样例中该字段随访问顺序递增)补充判断顺序,子查询修改为:
SELECT 1 FROM Visit V3 WHERE V3.uid = V1.uid AND ( V3.dt > V1.dt OR (V3.dt = V1.dt AND V3.rev > V1.rev) ) AND ( V3.dt < V2.dt OR (V3.dt = V2.dt AND V3.rev < V2.rev) )
- 用你提供的样例数据验证:V1为1890-05-14的A01→A04记录,V2为1890-05-16的A04→A01记录,中间存在1890-05-15的A02访问记录,会被
NOT EXISTS过滤,不会返回结果,符合预期。
内容的提问来源于stack exchange,提问作者Killua87
相关产品推荐
相关产品推荐

