如何在sql中创建动态where子句?

时间:2016-07-19 14:22:58

标签: sql teradata

所以我创建了一个表,其中包含来自事务表的以下列以及所有客户购买记录: 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

编辑:我只是想在客户旁边放一个标志,如果他们在每个月都活跃,定义为去年至少有一笔交易,谢谢!

1 个答案:

答案 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