Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从事务数据创建客户流失表?_Sql_Google Bigquery_Lag_Lead_Churn - Fatal编程技术网

Sql 如何从事务数据创建客户流失表?

Sql 如何从事务数据创建客户流失表?,sql,google-bigquery,lag,lead,churn,Sql,Google Bigquery,Lag,Lead,Churn,目前我的交易表中有客户每月的交易数据。Account_ID标识客户的ID。Order_ID是客户已下的订单数。报告周开始日期是指从周一开始进行每笔交易的一周(购买日期) 如何在每次交易完成后创建一个新表来标识客户状态?请注意,尽管未进行任何交易,但新表的报告周开始日期一直到当前日期 客户状况 - New : customers who made their first paid subscription - Recurring : customers with continuous payme

目前我的交易表中有客户每月的交易数据。Account_ID标识客户的ID。Order_ID是客户已下的订单数。报告周开始日期是指从周一开始进行每笔交易的一周(购买日期)

如何在每次交易完成后创建一个新表来标识客户状态?请注意,尽管未进行任何交易,但新表的报告周开始日期一直到当前日期

客户状况

- New : customers who made their first paid subscription
- Recurring :  customers with continuous payment
- Churned :  when customers' subscriptions had expired and there's no renewal within the next month/same month
- Reactivated : customers who had churned and then returned to re-subscribe
事务表

Account_ID  | Order_ID |  Reporting_week_start_date| Date_Purchased | Data_Expired
    001     | 1001     |       31 Dec 2018         |   01 Jan 2019  |    08 Jan 2019
    001     | 1001     |       07 Jan 2019         |   08 Jan 2019  |    15 Jan 2019
    001     | 1001     |       14 Jan 2019         |   15 Jan 2019  |    22 Jan 2019    #Transaction 1
    001     | 1001     |       21 Jan 2019         |   22 Jan 2019  |    29 Jan 2019
    001     | 1001     |       28 Jan 2019         |   29 Jan 2019  |    31 Jan 2019

    001     | 1002     |       28 Jan 2019         |   01 Feb 2019  |    08 Feb 2019
    001     | 1002     |       04 Feb 2019         |   08 Feb 2019  |    15 Feb 2019    #Transaction 2
    001     | 1002     |       11 Feb 2019         |   15 Feb 2019  |    22 Feb 2019
    001     | 1002     |       18 Feb 2019         |   22 Feb 2019  |    28 Feb 2019

    001     | 1003     |       25 Feb 2019         |   01 Mar 2019  |    08 Mar 2019
    001     | 1003     |       04 Mar 2019         |   08 Mar 2019  |    15 Mar 2019
    001     | 1003     |       11 Mar 2019         |   15 Mar 2019  |    22 Mar 2019    #Transaction 3
    001     | 1003     |       18 Mar 2019         |   22 Mar 2019  |    29 Mar 2019
    001     | 1003     |       25 Mar 2019         |   29 Mar 2019  |    31 Mar 2019

    001     | 1004     |       27 May 2019         |   01 Jun 2019  |    08 Jun 2019
    001     | 1004     |       03 Jun 2019         |   08 Jun 2019  |    15 Jun 2019    #Transaction 4
    001     | 1004     |       10 Jun 2019         |   15 Jun 2019  |    22 Jun 2019
    001     | 1004     |       17 Jun 2019         |   22 Jun 2019  |    29 Jun 2019
    001     | 1004     |       24 Jun 2019         |   29 Jun 2019  |    30 Jun 2019
预期产量

Account_ID  | Order_ID |  Reporting_week_start_date| Customer_status
    001     | 1001     |       31 Dec 2018         |   New  
    001     | 1001     |       07 Jan 2019         |   New               #Transaction 1
    001     | 1001     |       14 Jan 2019         |   New
    001     | 1001     |       21 Jan 2019         |   New  
    001     | 1001     |       28 Jan 2019         |   New  

    001     | 1002     |       28 Jan 2019         |   Recurring        
    001     | 1002     |       04 Feb 2019         |   Recurring         #Transaction 2
    001     | 1002     |       11 Feb 2019         |   Recurring  
    001     | 1002     |       18 Feb 2019         |   Recurring  

    001     | 1003     |       25 Feb 2019         |   Churned  
    001     | 1003     |       04 Mar 2019         |   Churned           #Transaction 3
    001     | 1003     |       11 Mar 2019         |   Churned      
    001     | 1003     |       18 Mar 2019         |   Churned    
    001     | 1003     |       25 Mar 2019         |   Churned    

    001     |    -     |       1 Apr 2019          |   Churned  
    001     |    -     |       08 Apr 2019         |   Churned    
    001     |    -     |       15 Apr 2019         |   Churned      
    001     |    -     |       22 Apr 2019         |   Churned    
    001     |    -     |       29 Apr 2019         |   Churned

    001     |    -     |       29 Apr 2019         |   Churned  
    001     |    -     |       06 May 2019         |   Churned    
    001     |    -     |       13 May 2019         |   Churned      
    001     |    -     |       20 May 2019         |   Churned    
    001     |    -     |       27 May 2019         |   Churned

    001     | 1004     |       27 May 2019         |   Reactivated  
    001     | 1004     |       03 Jun 2019         |   Reactivated       #Transaction 4
    001     | 1004     |       10 Jun 2019         |   Reactivated  
    001     | 1004     |       17 Jun 2019         |   Reactivated  
    001     | 1004     |       24 Jun 2019         |   Reactivated'
    ...
    ...
    ...
    current date

我认为您只需要窗口函数和
case
逻辑。假设您所指的日期是报告周开始日期,那么逻辑如下:

select t.*,
       (case when Reporting_week_start_date = min(Reporting_week_start_date) over (partition by account_id)
             then 'New'
             when Reporting_week_start_date < dateadd(lag(Reporting_week_start_date) over (partition by account_id order by Reporting_week_start_date), interval 1 month)
             then 'Recurring'
             when Reporting_week_start_date < dateadd(lead(Reporting_week_start_date) over (partition by account_id order by Reporting_week_start_date), interval -1 month)
             then 'Churned'
             else 'Reactivated'
        end) as status
from transactions t;
选择t.*,
(报告周开始日期=min(报告周开始日期)超过(按帐户id划分)时的情况)
然后是“新的”
当报告周开始日期<日期添加(滞后(报告周开始日期)超过(按账户划分,按报告周开始日期排序),间隔1个月)
然后“重复”
当报告周开始日期<日期添加(lead(报告周开始日期)超过(按账户划分,按报告周开始日期排序),间隔-1个月)
然后“搅动”
否则“重新激活”
结束)作为状态
来自交易t;

这些不完全是您指定的规则。但是他们似乎对你想做的事情有很合理的解释。

这是家庭作业/学习作业吗?到目前为止,您尝试了什么?您的数据中有三个日期。我们完全不清楚这些数据与您指定的规则有什么关系。客户状态(超前和滞后)实际上是与购买日期进行比较的,而不是报告周开始日期。报告周开始日期用于在新表中创建记录-从购买数据的第一个报告周开始日期到当前日期的最后一个报告周开始日期。比如队列分析。还有一条规则-每个订单id必须具有相同的客户状态。订单id更改时客户状态更改(下一笔交易)