我正在处理 BigQuery,并希望查看用户过去每个会话的行为,直到他们达到转化,用 result=1
表示。
现在,我将给出一个 1 个用户的表格示例。我还想为所有用户抽象它。请注意,visitId
对于每个fullVisitorId
都是唯一的。
#t1
fullVisitorId visitId visitNumber page_views result
1 1214 4 11 0
1 112 5 9 0
1 1014 6 10 1
1 1511 7 10 0
1 1614 8 10 1
实际上,我希望查询在第一次转换后删除所有行,从而有效地给我们留下:
#t2
fullVisitorId visitId visitNumber page_views result
1 1214 4 11 0
1 112 5 9 0
1 1014 6 10 1
如果该fullVisitorId
没有转换,则保留所有行。我可以使用以下 SQL 将其聚合为 1 行:
SELECT fullVisitorId,
MAX(visitNumber)-MIN(visitNumber) AS number_visits,
SUM(page_views)/number_visits AS pages_per_s,
FROM t2
GROUP BY fullVisitorId
这会给我我想要的。
#t3_visitor_past
fullVisitorId number_visits pages_per_s
1 3 10
请记住,我希望拥有任意数量的不同fullVisitorId
。
我在执行以下步骤中找到了解决方案:
- 查找
result=1
称之为t4
的所有行 - 从上表中,运行
SELECT fullVisitorId, visitId, MIN(visitNumber) FROM t4
以获取第一个事件的列表,请调用此表t5
- 执行内部联接:
SELECT * FROM t1 INNER JOIN t5 ON t1.fullVisitorId = t5.fullVisitorId AND t1.visitNumber <= t5.visitNumber
对于非转换用户,过程相同。