当teradata中存在时,如何旁路case not?

当teradata中存在时,如何旁路case not?,teradata,Teradata,因此,我从包含所有客户购买记录的交易表中创建了一个包含以下列的表: 年月, 客户ID, 当月的交易数量。 我正在尝试创建一个输出为1的表。月年,2。当月流失客户数定义为过去12个月内没有交易的客户。因此,如果客户在2014年1月只购买了一次,那么他们将在2015年2月流失 如果此人在2015年3月有一笔交易,但在2016年5月之前没有交易,那么他们在2016年4月又进行了交易 如果您有任何建议,我将不胜感激 我编写的代码可以在SQL中使用,但不能在Teradata中使用: 好吧,由于语法错误,您

因此,我从包含所有客户购买记录的交易表中创建了一个包含以下列的表:

年月, 客户ID, 当月的交易数量。 我正在尝试创建一个输出为1的表。月年,2。当月流失客户数定义为过去12个月内没有交易的客户。因此,如果客户在2014年1月只购买了一次,那么他们将在2015年2月流失

如果此人在2015年3月有一笔交易,但在2016年5月之前没有交易,那么他们在2016年4月又进行了交易

如果您有任何建议,我将不胜感激

我编写的代码可以在SQL中使用,但不能在Teradata中使用:


好吧,由于语法错误,您现有的查询将无法运行。不存在任何情况,否则它在Teradata中是有效的

但有两个问题:

在添加间隔时,切勿使用年或月。这可能会导致月底日期的日期无效,请改用“添加月”。 像这样的相关子查询在所有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

顺便说一句,没有名为SQL的DBMS。当然,Microsoft试图将其与他们的产品关联起来。

好吧,由于语法错误,您现有的查询将无法运行。没有案例,否则它在Teradata中有效

但有两个问题:

在添加间隔时,切勿使用年或月。这可能会导致月底日期的日期无效,请改用“添加月”。 像这样的相关子查询在所有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
顺便说一句,没有名为SQL的DBMS。当然,微软试图将其与他们的产品关联起来