Microsoft SQL Server
Функции окна
Поиск…
Центрированное скользящее среднее
Рассчитайте скользящее среднее значение по 6-месячному (126-дневному) среднему по цене:
SELECT TradeDate, AVG(Px) OVER (ORDER BY TradeDate ROWS BETWEEN 63 PRECEDING AND 63 FOLLOWING) AS PxMovingAverage
FROM HistoricalPrices
Обратите внимание: поскольку в начале и в конце диапазона TradeDate он занимает до 63 строк до и после каждой возвращаемой строки, он не будет центрирован: когда он достигнет наибольшего TradeDate, он сможет найти только 63 предшествующих значения включить в среднем.
Найти самый последний элемент в списке событий, отмеченных по времени.
В таблицах, регистрирующих события, часто бывает поле datetime, записывающее время, когда произошло событие. Поиск единственного последнего события может быть затруднен, потому что всегда возможно, что два события были записаны с точно идентичными отметками времени. Вы можете использовать row_number () over (order by ...), чтобы убедиться, что все записи уникально ранжированы и выберите верхнюю (где my_ranking = 1)
select *
from (
select
*,
row_number() over (order by crdate desc) as my_ranking
from sys.sysobjects
) g
where my_ranking=1
Этот же метод можно использовать для возврата одной строки из любого набора данных с потенциально повторяющимися значениями.
Скользящее среднее за последние 30 пунктов
Скользящая средняя за последние 30 единиц
SELECT
value_column1,
( SELECT
AVG(value_column1) AS moving_average
FROM Table1 T2
WHERE ( SELECT
COUNT(*)
FROM Table1 T3
WHERE date_column1 BETWEEN T2.date_column1 AND T1.date_column1
) BETWEEN 1 AND 30
) as MovingAvg
FROM Table1 T1