[英]BigQuery/SQL: dataset transformation using SELF JOIN and LAG
我有一个类似于以下虚拟数据集的输入数据集:
date time userid channel transaction
20161012 12:00:00 1 seo 0
20161018 16:50:00 1 referral 1
20161011 09:20:00 2 sea 0
20161020 12:20:00 2 direct 0
20161020 20:40:00 2 facebook 0
20161021 11:35:00 2 direct 1
20161019 01:05:00 3 seo 0
20161020 24:20:00 3 sea 1
20161021 06:20:00 4 direct 1
我想获取以下输出数据集:
userid channel1 channel2
1 seo referral
1 referral transaction
2 sea direct
2 direct facebook
2 facebook direct
2 direct transaction
3 seo sea
3 sea transaction
4 direct transaction
换句话说,我想创建一个数据集,该数据集记录客户旅程中彼此遵循的渠道之间的所有步骤。 表示在输出数据集中的事务被视为通道。
我知道我可以通过使用JOIN
(本身)和LAG
来实现类似的功能,但是我无法使其工作...
有谁知道获取此输出数据集的简单解决方案?
提前致谢!
BigQuery旧版SQL确实支持Window函数,包括LAG()和LEAD()
BigQuery标准SQL同样如此-请参阅分析功能 ,以及启用标准SQL和从旧版SQL迁移
尝试以下BigQuery方言
SELECT
userid, channel1, IFNULL(channel2, "transaction") AS channel2, transaction
FROM (
SELECT
userid, DATE, TIME, transaction, channel AS channel1,
LEAD(channel) OVER(PARTITION BY userid ORDER BY DATE, TIME) AS channel2
FROM YourTable
// ORDER BY userid, DATE, TIME
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.