Microsoft SQL Server
Funciones de ventana
Buscar..
Media móvil centrada
Calcule un promedio móvil de 6 meses (126 días hábiles) centrado en un precio:
SELECT TradeDate, AVG(Px) OVER (ORDER BY TradeDate ROWS BETWEEN 63 PRECEDING AND 63 FOLLOWING) AS PxMovingAverage
FROM HistoricalPrices
Tenga en cuenta que, debido a que tomará hasta 63 filas antes y después de cada fila devuelta, al comienzo y al final del rango de TradeDate no estará centrado: cuando alcance la mayor TradeDate, solo podrá encontrar 63 valores anteriores a Incluir en la media.
Encuentre el elemento más reciente en una lista de eventos con marca de tiempo
En las tablas que registran eventos, a menudo hay un campo de fecha y hora que registra la hora en que ocurrió un evento. Encontrar el evento más reciente puede ser difícil porque siempre es posible que dos eventos se registraron con marcas de tiempo exactamente idénticas. Puede usar el número de fila () sobre (ordenar por ...) para asegurarse de que todos los registros estén clasificados de forma única, y seleccionar el primero (donde my_ranking = 1)
select *
from (
select
*,
row_number() over (order by crdate desc) as my_ranking
from sys.sysobjects
) g
where my_ranking=1
Esta misma técnica se puede usar para devolver una sola fila desde cualquier conjunto de datos con valores potencialmente duplicados.
Promedio móvil de los últimos 30 artículos
Promedio móvil de los últimos 30 artículos vendidos
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