所以我创建了一个表,其中包含来自事务表的以下列以及所有客户购买记录:
我正在尝试创建一个输出为1的表。月 - 年,2。该月份流失客户的数量定义为拥有的客户在过去12个月没有交易。 (因此,如果客户在2014年1月仅进行了一次购买,那么客户将在2015年2月流失。
如果该人在2015年3月进行了交易,但直到2016年5月才进行交易,那么他们将在2016年4月再次进行交易。
我将不胜感激。
我制作的代码适用于SQL
但不适用Teradata
:
select
month_start_date,
(select 1
from merchantengagement1 t2
where
t2.month_start_date >= t.month_start_date - INTERVAL '1' YEAR and
t2.month_start_date < t.month_start_date and
transactions > 0 and
t.rcvr_ID = t2.rcvr_ID
) then 1 else 0 end) as churnedCustomers
from
merchantengagement1 t
group by month_start_date
答案 0 :(得分:2)
好吧,由于语法错误(没有CASE),您的现有查询将无法运行,否则它在Teradata中有效。
但有两个问题:
YEAR
或MONTH
(可能会导致月末日期的日期无效),请改用ADD_MONTHS
。您的逻辑可以使用OLAP函数表示,检查以下事务是否提前超过12个月或最近的事务是否超过12个月:
SELECT rcvr_ID,
-- if this date is before the next transaction it's a churn
ADD_MONTHS(month_start_date, 12) AS churn_date
FROM merchantengagement1
WHERE transactions > 0
QUALIFY -- more than 12 months difference
churn_date <
COALESCE(MAX(month_start_date) -- next transaction
OVER (PARTITION BY rcvr_ID
ORDER BY month_start_date
ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
, CURRENT_DATE) -- or today
顺便说一下,没有名为SQL
的DBMS(当然,微软试图将其与他们的产品相关联)