Как найти скользящую 3-месячную дисперсию? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть набор данных с двумя столбцами, датой и суммой. Я хотел бы найти дисперсию за последние 3 месяца (VAR), а затем агрегировать дисперсию (VAR), усредняя их (AVG) по месяцам. Я также хочу убедиться, что если доступны данные менее чем за 3 месяца, то не рассчитывать дисперсию. (таким образом, у меня есть данные за 6 месяцев, у меня будет только среднее отклонение за последние 3 месяца). Большое спасибо

примечание: я использую SSMS

Date                 Amount
23 February 2017    £41,079
07 January 2017     £25,856
....

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете использовать встроенную функцию агрегации / окна var(), если ваше определение отклонения соответствует тому, что делает эта функция.

Если у вас есть один день на строку и вы готовы принять 90 дней как «3 месяца», то вы можете просто сделать:

select t.*, var(amount) over (order by date rows between 89 preceding and current row) as rolling_var
from t;

Если эти условия не выполняются, гораздо менее эффективный метод использует самосоединение:

select t.date, t.amount, var(t2.amount)
from t join
     t t2
     on t2.date > dateadd(month, -3, t.date) and t2.date <= t.date
group by t.date, t.amount;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...