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

时间:2017-01-06 00:23:01

标签: mysql sql macros teradata

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

从transaction_table中选择user_id,sum(tran_amt)为tot_amt 其中tran_dt> = cast(' 2016-12-31'作为日期) - INTERVAL' 2'天     和tran_dt< =' 2016-12-31'

我想计算整个月的3天累计交易金额,从12月1日到12月31日。我知道如何在SAS中做到这一点,只需更换日期' 2016-12-31'使用宏变量,例如& tera_dt。,类似这样的

%我i = 1%到31;

致电同情(' tera_dt',"'" || put(intnx(' day',' 1Jan2017' d, - &安培; I,' b&#39),yymmdd10)||"'&#34)

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

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

1 个答案:

答案 0 :(得分:1)

我认为您不需要为此问题生成代码。您可以针对系统视图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