Я работаю над сложной статистической функцией, которая требует нахождения как минимум 10 предыдущих вычисленных значений. Вычисленные значения для каждой из предыдущих строк зависят не только от среднего значения по текущей строке, но также и по вычислениям предыдущих строк. На приведенном ниже рисунке показан желаемый результат запроса:
Я могу получить среднее значение за 10 дней, но не могу понять, как применить другие вычисления без использования оконной функции для каждого отдельного сценария, который был бы очень неэффективным. Ниже приведен код, который у меня есть:
CREATE TABLE #TBL(
[id] int IDENTITY(1,1) NOT NULL,
[price] numeric(20,10)
)
INSERT INTO #TBL ([price])
VALUES (93.02),(90.56),(88.63),(90.3),(91.58),(90.42),(89.5),(89.23),(87.07),(85.88),(86.04),(87.26),(87.67),(84.37),(84.13),(83.3),(82.4),(81.73),(82),(80.69),(82.13)
SELECT
[id], [price],
CASE WHEN [id] >= 10 THEN
avg([price]) OVER(ORDER BY ID ASC ROWS BETWEEN 9 PRECEDING AND CURRENT ROW)
END AS [average (last 10)]
FROM #TBL
Любая помощь в создании эффективного запроса будет принята с благодарностью.