Как вычислить скользящее среднее по рангу (не по ряду) в 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;