Рассчитать конкретную скользящую среднюю с помощью SQL-запроса - PullRequest
1 голос
/ 01 ноября 2019

Предположим, что у меня есть таблица с одним столбцом "A", и я хотел бы создать другой столбец с именем "B", такой что

B[i] = 0.2*A[i] + 0.8*B[i-1]

, где B[0]=0.

Моя проблема в том, что я не могу использовать функцию OVER(), потому что я хочу использовать значения в B, пока я пытаюсь построить B. Любая идея приветствуется. Спасибо

1 Ответ

0 голосов
/ 02 ноября 2019

Это довольно сложное математическое упражнение. Вы хотите накапливать экспоненциально убывающие суммы из предыдущих строк.

Это немного сбивает с толку, потому что сумма, приходящаяся на каждую строку, составляет 20%, но это только фактор в формуле.

В любом случае, это, кажется, делает то, что вы хотите:

select t.*,
       sum(power(0.8, -n) * a * 0.2) over (order by id) / power(0.8, -n)
from (select t.8,
             row_number() over (order by id) - 1 as n
      from t
     ) x;

Здесь - это скрипта db <> с использованием Postgres.

...