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

Need sum of a column from a filter condition for each row

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

已尝试以下查询并尝试使用 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

Teradata 不支持 RANGE 的累积和,但您可以使用 Correlated Scalar 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 的行数。