如何在SQL/Teradata中创建宏变量?

How to create macro variable in SQL/Teradata?

我写了一个简单的查询,它每 3 天汇总每个用户 ID 的交易金额,

select user_id,求和(tran_amt)作为 tot_amt 来自 transaction_table
其中 tran_dt>=cast('2016-12-31' 作为日期) - INTERVAL '2' DAY 和 tran_dt<='2016-12-31'

我想计算从 12 月 1 日到 12 月 31 日整个月的 3 天累计交易金额。我知道如何在 SAS 中执行此操作,只需将日期“2016-12-31”替换为宏变量,例如 &tera_dt.,像这样

%do i=1 %to 31;

调用 symput('tera_dt', "'"||put(intnx('day','1Jan2017'd,-&i,'b'),yymmdd10.)||" '")

但是我如何在 Teradata 中创建这个日期宏变量?谢谢!


或者换句话说,如何在 Teradata 中创建变量列表?我想创建一个名为 tera_dt 的宏变量,这个变量包含日期从 '2016-10-01' 到 '2016-10-31' 总共 31 个日期,然后我将 运行 我的查询宏变量 tera_dt。谢谢!

我认为您不需要为此问题生成代码。您可以加入针对系统视图的查询 sys_calendar.calendar。像这样:

select a.user_id
     , b.calendar_date as date
     , sum(a.tran_amt) as tot_amt
from transaction_table a
inner join 
  (select calendar_date from sys_calendar.calendar
  where year_of_calendar=2016 and month_of_year=12) b
on a.tran_dt>=b.calendar_date - INTERVAL '2' DAY
  and a.tran_dt<=b.calendar_date
group by 1,2