如何通过案例不存在teradata?
问题描述:
所以我创建了从事务表与所有客户购买记录有如下的表:如何通过案例不存在teradata?
- 月 - 年,
- 客户ID,
- 交易数在那个月。
我试图创建具有的1输出月 - 年表,2 当月定义为客户数目流失的客户中谁没有过交易在过去的12个月里。 (因此,如果客户在2014年1月仅进行一次购买,则客户将在2015年2月发生流失。
如果此人在2015年3月有交易,但直到2016年5月都没有交易,那么他们在4月份再次激活2016)。
我希望这里有任何建议。
的代码我作出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
答
那么,现有的查询将不会因为语法错误(没有CASE)运行,否则它在Teradata的有效。
但有两个问题:
- 从不使用
YEAR
或MONTH
添加间隔时(这可能会导致一个无效的日期为结束日期月),使用ADD_MONTHS
代替。 - 像这样的相关子查询在所有DBMS中都不好,但在Teradata中尤其糟糕,导致产品连接。
您的逻辑可以使用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
顺便说一句,有没有DBMS命名为SQL
(当然,微软试图将它与它们的产品相关联)