【发布时间】:2022-11-25 23:14:39
【问题描述】:
我试图将 2021 年 (A.TXN_MTH) 购物的客户 (contact_key) 列分为新客户和“回头客”,回头客意味着他们在过去 12 个月内没有购物(X.Fiscal_mth_idnt 列中的 YYYYMM)。
我正在使用 CASE WHEN A.TXN_MTH = MIN(X.FISCAL_MTH_IDNT) THEN 'NEW' 这是正确的。下一个情况应该是 X.TXN_MTH 之前的最大月份是 12 个月或更早之前。我在 Where 语句中添加了 12 个月的部分。我应该嵌套 3 个 CASE WHEN'S 而不是 WHERE 吗?
SELECT
T.CONTACT_KEY
, A.TXN_MTH
, CASE WHEN A.TXN_MTH = MIN(X.FISCAL_MTH_IDNT) THEN 'NEW'
WHEN (MAX(CASE WHEN X.FISCAL_MTH_IDNT < A.TXN_MTH THEN X.FISCAL_MTH_IDNT ELSE NULL END)) THEN 'RETURNING'
END AS CUST_TYPE
FROM B_TRANSACTION T
INNER JOIN B_TIME X
ON T.TRANSACTION_DT_KEY = X.DATE_KEY
INNER JOIN A
ON A.CONTACT_KEY = T.CONTACT_KEY AND A.BU_KEY = T.BU_KEY
WHERE (MAX(CASE WHEN X.FISCAL_MTH_IDNT < A.TXN_MTH THEN X.FISCAL_MTH_IDNT ELSE NULL END)) < A.TXN_MTH - (date_format(add_months(concat_ws('-',substr(yearmonth,1,4),substr(yearmonth,5,2),'01'),-12),'yyyyMM')
GROUP BY
T.CONTACT_KEY
, TXN_MTH;
【问题讨论】: