Vertica中查询用户购买前最后n个浏览页面的SQL实现
没问题,我来帮你实现这个需求——在Vertica中查询每个用户购买产品前最后N个浏览页面的SQL语句,下面是具体的方案:
查询每个用户购买前最后N个浏览页面的Vertica SQL
假设我们要获取每个用户每笔订单对应的购买前最后2个浏览页面(你可以把2替换成任意需要的N值),具体SQL实现如下:
WITH user_sale_page_views AS ( SELECT s.sale_id, s.user_id, s.date AS sale_date, pv.page_id, pv.date AS view_date, -- 按用户和订单分组,对该订单前的浏览记录按时间倒序排名 ROW_NUMBER() OVER ( PARTITION BY s.user_id, s.sale_id ORDER BY pv.date DESC ) AS view_rank FROM sales s INNER JOIN page_views pv ON s.user_id = pv.user_id AND pv.date < s.date -- 仅保留购买之前的浏览记录 ) SELECT sale_id, user_id, sale_date, page_id, view_date FROM user_sale_page_views WHERE view_rank <= 2 -- 替换为你需要的N值 ORDER BY user_id, sale_date, view_rank;
核心细节说明:
- 窗口函数
ROW_NUMBER():按用户和订单维度分组,对每个订单对应的前置浏览记录按时间从晚到早编号,排名1就是购买前的最后一次浏览,排名2是倒数第二次,以此类推。 - 时间过滤条件:
pv.date < s.date确保我们只统计用户在下单之前的浏览行为,不会包含购买后的页面访问。 - 灵活调整N值:只需要修改
WHERE view_rank <= 2中的数字,就能快速切换要获取的“最后N个页面”数量。
针对你给出的示例数据,比如用户A在2018-05-01的订单,这个查询会筛选出page_views表中user_id为A且日期早于2018-05-01的所有记录,然后取时间最晚的2条返回。
内容的提问来源于stack exchange,提问作者llulai
相关产品推荐
相关产品推荐

