Microsoft SQL Server
Funzioni della finestra
Ricerca…
Media mobile centrata
Calcola una media mobile a 6 mesi (126 giorni lavorativi) centrata di un prezzo:
SELECT TradeDate, AVG(Px) OVER (ORDER BY TradeDate ROWS BETWEEN 63 PRECEDING AND 63 FOLLOWING) AS PxMovingAverage
FROM HistoricalPrices
Tieni presente che, poiché saranno necessarie fino a 63 righe prima e dopo ogni riga restituita, all'inizio e alla fine dell'intervallo TradeDate non sarà centrato: quando raggiunge il TradeDate più grande sarà in grado di trovare solo 63 valori precedenti includere nella media.
Trova l'elemento più recente in un elenco di eventi con data e ora
Nelle tabelle che registrano eventi c'è spesso un campo datetime che registra l'ora in cui si è verificato un evento. Trovare il singolo evento più recente può essere difficile perché è sempre possibile che due eventi siano stati registrati con timestamp esattamente identici. Puoi usare row_number () over (order by ...) per assicurarti che tutti i record siano classificati in modo univoco e selezionare quello superiore (dove my_ranking = 1)
select *
from (
select
*,
row_number() over (order by crdate desc) as my_ranking
from sys.sysobjects
) g
where my_ranking=1
Questa stessa tecnica può essere utilizzata per restituire una singola riga da qualsiasi set di dati con valori potenzialmente duplicati.
Media mobile degli ultimi 30 articoli
Media mobile degli ultimi 30 articoli venduti
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