Sql 将第一行与所有其他行合并|大查询
我正在尝试为客户寻找所有可能的购买路线。我目前呈现数据的方式如下所示:Sql 将第一行与所有其他行合并|大查询,sql,google-bigquery,Sql,Google Bigquery,我正在尝试为客户寻找所有可能的购买路线。我目前呈现数据的方式如下所示: email purchase_order sku first_order second_order third_order abc@email.com 1 PS2525 PS2525 null null abc@email.com 2 PS2525 PS2525
email purchase_order sku first_order second_order third_order
abc@email.com 1 PS2525 PS2525 null null
abc@email.com 2 PS2525 PS2525 PS2525 null
abc@email.com 2 LG1515 PS2525 LG1515 null
abc@email.com 3 PS2525 PS2525 null PS2525
abc@email.com 3 RG7578 PS2525 null RG7578
但我要找的是每次购买的路线。我希望我的数据如下所示:
email first_order second_order third_order
abc@email.com PS2525 PS2525 PS2525
abc@email.com PS2525 PS2525 RG7578
abc@email.com PS2525 LG1515 PS2525
abc@email.com PS2525 LG1515 RG7578
这显示了客户在第一次订购后所走的每一条路线。有没有办法创建这种类型的表?我很难想出一种方法来实现这一点。看起来您想要:
select email, sku, max(first_order), max(second_order), max(third_order)
from t
group by email, sku;
下面是BigQuery标准SQL
#standardSQL
SELECT email, o1.sku AS first_order, o2.sku AS second_order, o3.sku AS third_order
FROM `project.dataset.table` o1
LEFT JOIN `project.dataset.table` o2
USING(email)
LEFT JOIN `project.dataset.table` o3
USING(email)
WHERE o1.purchase_order = 1
AND o2.purchase_order = 2
AND o3.purchase_order = 3
如果应用于问题中的样本数据,则输出为
Row email first_order second_order third_order
1 abc@email.com PS2525 PS2525 PS2525
2 abc@email.com PS2525 PS2525 RG7578
3 abc@email.com PS2525 LG1515 PS2525
4 abc@email.com PS2525 LG1515 RG7578
最多只有三份订单?是的,只有三份订单是我设定的限制。