сумма последовательных значений - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть следующие данные в таблице Teradata. Мое требование - последовательное sum between OFFLOAD_SECONDS <5 MInutes(300seconds) и игнорировать значение OFFLOAD_SECONDS, где OFFLOAD_SECONDS >=5Minutes, и делать скользящую сумму, пока мы не получим offload_seconds >=5 minutes.

Мои текущие данные.

DATE        number     Time                    OFFLOAD_SECONDS     
2019/03/14     461     2019/03/14 18:24:53     ?     
2019/03/14     461     2019/03/14 18:25:32     39     
2019/03/14     461     2019/03/14 18:32:31     419
2019/03/14     461     2019/03/14 18:32:35     4     
2019/03/14     461     2019/03/14 18:32:52     17     
2019/03/14     461     2019/03/14 18:33:00     8     
2019/03/14     461     2019/03/14 18:33:08     8     
2019/03/14     461     2019/03/14 18:45:53     765 

Выход

Date        Number   consecutive sum of OFFLOAD_SECONDS 
3/14/2019   461      39
3/14/2019   461      37

1 Ответ

0 голосов
/ 21 февраля 2020

Этот запрос должен дать ожидаемый результат. Дайте мне знать.

http://sqlfiddle.com/#! 17 / 4a4fb / 3

    select distinct date
      , sum(case when offload_seconds>=300 then 0 else offload_seconds end) over (partition by col_sum)  as con_sum
    from 
    (
      select date, number, time, offload_seconds
      , sum(case when offload_seconds>=300 then 1 else 0 end) over( rows between unbounded preceding and current row) as col_sum
      from tab1
    ) a
    qualify con_sum<>0

В качестве альтернативы, эта более длинная версия с дополнительным выбором обертки выше SQL, также работы:

http://sqlfiddle.com/#! 17 / 4a4fb / 13

 select dt, nm, con_sum 
 from (

    select distinct dt, nm
      , sum(case when offload_seconds>=300 then 0 else offload_seconds end) over (partition by col_sum)  as con_sum
    from 
    (
      select dt, nm, tm, offload_seconds
      , sum(case when offload_seconds>=300 then 1 else 0 end) over( rows between unbounded preceding and current row) as col_sum
      from tab2
    ) a
) t
where t.con_sum <>0;
...