繁体   English   中英

BigQuery / SQL:使用SELF JOIN和LAG进行数据集转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM