Требуется сумма столбца из условия фильтра для каждой строки - PullRequest
0 голосов
/ 27 марта 2019

Необходимо получить общую сумму дефекта между столбцом 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 Ответ

1 голос
/ 27 марта 2019

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

Производительность может быть плохой в зависимости от общего количества строк и количества строк в идентификаторе.

...