Как вычислить скользящее среднее по рангу (не по ряду) в Teradata? - PullRequest
0 голосов
/ 15 мая 2019

I имеет следующую таблицу в Teradata:

 ranked | data_val 
-------- ----------
 1      | 100
 2      |  30
 2      |  20
 2      |  70

I хочу следующую таблицу, где avg_val - скользящее среднее data_valзначения, упорядоченные по возрастанию ranked значения:

 ranked | avg_val 
------ ---------
 1      | 100
 2      |  55

Я пытаюсь использовать:

SELECT 
    ranked
  , AVERAGE(data)val) OVER (
      PARTITION BY NULL 
      ORDER BY ranked ASC
      ROWS UNBOUNDED PRECEDING
      ) AS avg_val
  FROM tbl
;

, но получаю это:

 ranked | avg_val 
------ ---------
 1      | 100
 2      |  65
 2      |  50
 2      |  55

, которыйэто не то, что я хочу.

Как вернуть желаемый результат?

1 Ответ

1 голос
/ 15 мая 2019

Как насчет агрегации с оконными функциями?

select ranked,
       (sum(sum(data_val)) over (order by ranked rows between unbounded preceding and current row) /
        sum(count(*)) over (order by ranked rows between unbounded preceding and current row)
       )
from t
group by ranked;
...