所以我创建了一个表,其中包含来自事务表的以下列以及所有客户购买记录: 1. Month-Year,2.Customer ID,3。当月的交易数量。
我正在尝试创建一个具有输出的表 1.月 - 年,2。通过在前一年至少购买1次来定义的活跃客户数。
我目前的代码就是这个,但显然只捕获一个日期而where子句不是动态的。真的很感谢你的帮助。
select month_start_date, cust_ID,
(case when month_start_Date between date and add_months(date, -12) then count(cust_ID) else 0 end) as active
from myserver.mytable
where
month_start_Date>add_months(month_start_date,-12)
group by 1,2
编辑:我只是想在客户旁边放一个标志,如果他们在每个月都活跃,定义为去年至少有一笔交易,谢谢!
答案 0 :(得分:1)
您可以使用Teradata专有的EXPAND ON
synax创建时间序列:
SELECT month_start_date, COUNT(*)
FROM
( -- create one row for every month within the next year
-- after a customer's transaction
SELECT DISTINCT
BEGIN(pd) AS month_start_date,
cust_ID
FROM myserver.mytable
EXPAND ON PERIOD(month_start_date, ADD_MONTHS(month_start_date,12)) AS pd
BY ANCHOR MONTH_BEGIN -- every 1st of month
FOR PERIOD (DATE - 500, DATE) -- use this to restrict to a specific date range
) AS dt
GROUP BY month_start_date
ORDER BY month_start_date