有没有更好的方法来查看客户是否在SQL中经历了“休息期”?

时间:2019-07-01 18:13:02

标签: sql amazon-redshift

我试图查看经过两年的休眠后有多少客户返回。我还必须将包含旧数据(2008年之前)和较新的采购数据(2008年之后)的两个表合并在一起。每个表具有相同的列,但记录不同。

例如,如果Bill在2010年7月1日进行了购买,而直到2012年7月1日才购买了其他商品,则将被计为他。每个购买日期都有自己的列。

已建议我尝试下面显示的代码,但这非常慢(我有很多记录)。我想知道是否有更有效的方法来做到这一点。

(我正在使用Redshift)

FROM (SELECT s.cust_id, s.purchase_date,
             LAG(s.purchase_date) OVER (PARTITION BY s.cust_id ORDER BY s.purchase_date,) as prev_pd
      FROM newer_purchase_data s JOIN older_purchase_data l on s.cust_id = l.cust_id
     ) t
WHERE DATEDIFF(days, prev_pd, s.purchase_date) >= 730  /* 2 years in days */
;

1 个答案:

答案 0 :(得分:0)

当前,您正在引起多对多的连接(我认为),这会导致效率低下。

尝试使用此结构进行查询

select *
FROM (SELECT cust_id, purchase_date::timestamp,
             LAG(purchase_date::timestamp,1) OVER (PARTITION BY cust_id ORDER BY purchase_date) as prev_pd
          FROM 
           (select cust_id,purchase_date from older_purchase_data 
            union all
            select cust_id,purchase_date from newer_purchase_data 
           ) as x
         ) t
    WHERE DATEDIFF('day', prev_pd, purchase_date) >= 730  /* 2 years in days */