Как вычислить скользящее среднее по рангу (не по ряду) в Teradata?

У меня есть следующая таблица в Teradata:

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

Я хочу следующую таблицу, где 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 ответ

Решение

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

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;
Другие вопросы по тегам