Как я могу создать скользящую среднюю на SQL сервере, который сбрасывается для каждой уникальной группы? - PullRequest
0 голосов
/ 28 января 2020

У меня есть список контрактов, и у меня есть короткий запрос, который вычислит скользящее среднее за последние 30 записей, но я хотел бы сбросить его для каждого контракта. Вот что у меня есть.

SELECT
    contract, 
    tradedate,
    settle,
    AVG(settle) OVER (ORDER BY contract, tradedate ROWS between 29 PRECEDING and CURRENT ROW) AS MA30
FROM 
    Pricing.dbo.MasterReport$

Вывод выглядит так:

contract  tradedate     settle      MA30
----------------------------------------------
1RF18     2018-02-02    0.90277     0.95134
1RF19     2017-10-24    0.74563     0.943993214285714

Мне нужно MA30 для сброса на 1RF19 и запуска нового скользящего среднего. Как я могу это сделать?

1 Ответ

4 голосов
/ 28 января 2020

contract должен быть частью предложения PARTITION оконной функции, а не предложения ORDER BY:

SELECT
    contract, 
    tradedate,
    settle,
    AVG(settle) OVER (
        PARTITION BY contract 
        ORDER BY tradedate 
        ROWS BETWEEN 29 PRECEDING and CURRENT ROW
    ) AS MA30
FROM Pricing.dbo.MasterReport$
...