需要每行过滤条件中的一列总和

时间:2019-03-27 13:17:13

标签: sql teradata

对于单个ID,需要从main_date列到过去365天(一年)之间获取缺陷的总和(如果有)。 并且需要为每一行填充该值。

尝试了以下查询并尝试使用CSUM,但它不起作用:

    1)  select sum(Defect) as "sum",Id,MAIN_DT  
      from check_diff 
    where MAIN_DT between  ADD_MONTHS(MAIN_DT,-12) and MAIN_DT group by 2,3;

    2)select    Defect,
    Type1,
    Type2,
    Id,
    MAIN_DT,
    ADD_MONTHS(TIM_MAIN_DT,-12) year_old,
    CSUM(Defect,MAIN_DT)
    from check_diff
    where
        MAIN_DT between ADD_MONTHS(MAIN_DT,-12) and MAIN_DT group by id;

预期输出如下:

Defect     Type1    Type2     Id     main_dt    sum

1            a        a        1     3/10/2017  1
99           a        a        1     4/10/2018  99
0            a        b        1     7/26/2018  99
1            a        b        1     11/21/2018 100
1            a        c        2     12/20/2018 1

1 个答案:

答案 0 :(得分:1)

Teradata不支持RANGE的累积总和,但是您可以使用相关标量SUbquery 重写它:

select Defect, Id, MAIN_DT,
 ( select sum(Defect) as "sum"
   from check_diff as t2
   where t2.Id = t1.Id
     and t2.MAIN_DT > ADD_MONTHS(t1.MAIN_DT,-12) 
     and t2.MAIN_DT <= t1.MAIN_DT group by 2,3;
 ) as dt
from check_diff as t1

根据行总数和每个ID的行数,性能可能很差。