如何在Google BigQuery SQL中进行滞后和领先?

问题描述 投票:-1回答:1

在Google Big Query SQL中是否有执行LEAD和LAG的功能或方法来预测新客户,老客户和搅动的客户?

我的桌子

 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

谢谢。任何有用的帮助。

sql google-bigquery lag lead
1个回答
2
投票

如果我理解正确,则可以执行:

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没有以前的记录,则状态为“新客户”。
  • 如果order_id没有后续记录,则状态为“搅动”。
  • 如果同时存在上一个和下一个记录,则状态为“重复发生”。
© www.soinside.com 2019 - 2024. All rights reserved.