每个 ID 的订单计数并计算 BigQuery 中订单之间的时间
Order count per ID and calculate time between orders in BigQuery
我正在处理客户购买数据,并尝试在 Google BigQuery 中编写一个查询,按日期对所有购买进行排序,并为每个客户添加 purchase/order 个计数 (order_count) .另外,我想计算一个客户 (purchase_latency) 的订单之间的时间延迟(以天为单位)。我的查询目前看起来像这样:
select
email,
first_name,
last_name,
order_number,
purchase_date,
order_price,
d.code,
from my_order_data
left join
unnest(discount_codes) as d
包含“order_count”和“purchase_latency”的结果应如下所示:
email | order_number | purchase_date | order_price | order_count | purchase_latency
a@a.com | 34874 | 2020-01-02 16:20:12 UTC | 20,- | 1 | 0 |
a@a.com | 43598 | 2020-01-18 12:00:00 UTC | 30,- | 2 | 16 |
a@a.com | 47520 | 2020-01-30 08:05:00 UTC | 15,- | 3 | 12 |
b@b.com | 23598 | 2019-03-25 22:10:00 UTC | 22,- | 1 | 0 |
b@b.com | 25459 | 2019-03-31 17:35:00 UTC | 55,- | 2 | 6 |
如何添加“order_count”的编号以及“purchase_latency”的计算?
非常感谢!
您可以使用 window 函数:
通过增加购买日期来枚举每个客户的订单,可以使用row_number()
lag()
检索“上一次”购买的日期,您可以计算与当前日期的差异 date_diff()
:
所以:
select
email,
first_name,
last_name,
order_number,
purchase_date,
order_price,
row_number() over(partition by email order by purchase_date) order_count,
date_diff(
date(purchase_date),
coalesce(date(lag(purchase_date) over(partition by email order by purchase_date)), date(purchase_date)),
day
) purchase_latency
from my_order_data od
left join unnest(od.discount_codes) as dc
注意:我强烈建议在查询中的所有列名前加上它们所属的 table 的(别名)前缀;这使得查询明确,更容易理解。
我正在处理客户购买数据,并尝试在 Google BigQuery 中编写一个查询,按日期对所有购买进行排序,并为每个客户添加 purchase/order 个计数 (order_count) .另外,我想计算一个客户 (purchase_latency) 的订单之间的时间延迟(以天为单位)。我的查询目前看起来像这样:
select
email,
first_name,
last_name,
order_number,
purchase_date,
order_price,
d.code,
from my_order_data
left join
unnest(discount_codes) as d
包含“order_count”和“purchase_latency”的结果应如下所示:
email | order_number | purchase_date | order_price | order_count | purchase_latency
a@a.com | 34874 | 2020-01-02 16:20:12 UTC | 20,- | 1 | 0 |
a@a.com | 43598 | 2020-01-18 12:00:00 UTC | 30,- | 2 | 16 |
a@a.com | 47520 | 2020-01-30 08:05:00 UTC | 15,- | 3 | 12 |
b@b.com | 23598 | 2019-03-25 22:10:00 UTC | 22,- | 1 | 0 |
b@b.com | 25459 | 2019-03-31 17:35:00 UTC | 55,- | 2 | 6 |
如何添加“order_count”的编号以及“purchase_latency”的计算?
非常感谢!
您可以使用 window 函数:
通过增加购买日期来枚举每个客户的订单,可以使用
row_number()
lag()
检索“上一次”购买的日期,您可以计算与当前日期的差异date_diff()
:
所以:
select
email,
first_name,
last_name,
order_number,
purchase_date,
order_price,
row_number() over(partition by email order by purchase_date) order_count,
date_diff(
date(purchase_date),
coalesce(date(lag(purchase_date) over(partition by email order by purchase_date)), date(purchase_date)),
day
) purchase_latency
from my_order_data od
left join unnest(od.discount_codes) as dc
注意:我强烈建议在查询中的所有列名前加上它们所属的 table 的(别名)前缀;这使得查询明确,更容易理解。