【发布时间】:2021-07-28 22:30:47
【问题描述】:
我是 SAS 新手,我正在尝试使用 proc sql 构建一些查询。
我在 sql 中有以下代码(teradata 语法):
create multiset volatile table mvt_data, no log
( date1 date format 'yyyy-mm-dd'
, flag1 byteint
,cust_id varchar(25)
)
primary index (date1)
on commit preserve rows;
insert into mvt_data values (date '2020-01-03', 1, 'A');
insert into mvt_data values (date '2020-02-04', 0, 'A');
insert into mvt_data values (date '2020-04-05', 0, 'B');
insert into mvt_data values (date '2020-01-19', 1, 'C');
insert into mvt_data values (date '2020-03-20', 1, 'B');
insert into mvt_data values (date '2020-06-20', 1, 'D');
我想要以下输出:
对于 date1 的每个 Cust_id 和 YYYYMM 求和 Flag1 和总和 Flag1 相对于过去 6 个月的累积。
我会使用相同的语法:
with cte_data_ts (ts1, Flag1) as
(
select cast(date1 as timestamp(0)), Flag1
from mvt_data
)
, cte_gbt (YearMonth, SumFlag1, cust_id) as
(
select cust_id as cust_id
,to_char(begin($TD_TIMECODE_RANGE) at 0, 'yyyymm') as YearMonth
, sum(flag1) as SumFlag1
from cte_data_ts
group by time(cal_months(1))
using timecode(ts1)
fill (0)
)
select cust_id, YearMonth, SumFlag1
, sum(SumFlag1) over(order by cust_id, YearMonth asc rows between 6 preceding and current row) as SumFlag1_last6Months
from cte_gbt;
不幸的是,我知道 proc sql 中不存在 over(),所以任何人都可以帮我实现相同的结果吗?
编辑:
我添加了一个新列 (Cust_ID)
【问题讨论】: