我试图查看经过两年的休眠后有多少客户返回。我还必须将包含旧数据(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 */
;
答案 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 */