如何在 Google BigQuery SQL 中实现 LAG & LEAD?
How to do LAG & LEAD in Google BigQuery SQL?
在 Google Big Query SQL 中是否有函数或方法来执行 LEAD 和 LAG 以预测新客户、老客户和流失客户?
我的Table
Order_ID | Date_Start | Date_End |
001 | 2020-1-1 | 2020-2-1 |
001 | 2020-2-1 | 2020-3-1 |
001 | 2020-3-1 | 2020-4-1 |
预期输出:
Order_ID | Date_Start | Date_End | Churn_Status
001 | 2020-1-1 | 2020-2-1 | New Customer
001 | 2020-2-1 | 2020-3-1 | Recurring
001 | 2020-3-1 | 2020-4-1 | Churned
谢谢。任何帮助你都是有用的。
如果我理解正确,你可以这样做:
select t.*,
(case when lag(order_id) over (partition by order_id order by date_start) is null
then 'New Customer'
when lead(order_id) over (partition by order_id order by date_start) is null
then 'Churned'
else 'Recurring'
end) as churn_status
from t;
我将逻辑解释为:
- 如果
order_id
没有之前的记录,则状态为"New Customer"。
- 如果
order_id
没有后续记录,则状态为"Churned"。
- 如果上一条和下一条记录都存在,则状态为"Recurring"。
在 Google Big Query SQL 中是否有函数或方法来执行 LEAD 和 LAG 以预测新客户、老客户和流失客户?
我的Table
Order_ID | Date_Start | Date_End |
001 | 2020-1-1 | 2020-2-1 |
001 | 2020-2-1 | 2020-3-1 |
001 | 2020-3-1 | 2020-4-1 |
预期输出:
Order_ID | Date_Start | Date_End | Churn_Status
001 | 2020-1-1 | 2020-2-1 | New Customer
001 | 2020-2-1 | 2020-3-1 | Recurring
001 | 2020-3-1 | 2020-4-1 | Churned
谢谢。任何帮助你都是有用的。
如果我理解正确,你可以这样做:
select t.*,
(case when lag(order_id) over (partition by order_id order by date_start) is null
then 'New Customer'
when lead(order_id) over (partition by order_id order by date_start) is null
then 'Churned'
else 'Recurring'
end) as churn_status
from t;
我将逻辑解释为:
- 如果
order_id
没有之前的记录,则状态为"New Customer"。 - 如果
order_id
没有后续记录,则状态为"Churned"。 - 如果上一条和下一条记录都存在,则状态为"Recurring"。