Microsoft SQL Server
Window-functies
Zoeken…
Gecentreerd voortschrijdend gemiddelde
Bereken een gecentreerd voortschrijdend gemiddelde van een prijs over 6 maanden (126 werkdagen):
SELECT TradeDate, AVG(Px) OVER (ORDER BY TradeDate ROWS BETWEEN 63 PRECEDING AND 63 FOLLOWING) AS PxMovingAverage
FROM HistoricalPrices
Omdat het tot 63 rijen vóór en na elke geretourneerde rij zal duren, aan het begin en einde van het TradeDate-bereik, zal het niet worden gecentreerd: wanneer het de grootste TradeDate bereikt, zal het alleen 63 voorafgaande waarden kunnen vinden om opnemen in het gemiddelde.
Zoek het meest recente item in een lijst met tijdstempelgebeurtenissen
In tabellen waarin gebeurtenissen worden vastgelegd, is er vaak een datetime-veld waarin de tijd wordt vastgelegd waarop een gebeurtenis plaatsvond. Het vinden van de meest recente gebeurtenis kan moeilijk zijn omdat het altijd mogelijk is dat twee gebeurtenissen met exact identieke tijdstempels zijn opgenomen. U kunt row_number () gebruiken boven (sorteren op ...) om ervoor te zorgen dat alle records uniek gerangschikt zijn en de bovenste selecteren (waarbij my_ranking = 1)
select *
from (
select
*,
row_number() over (order by crdate desc) as my_ranking
from sys.sysobjects
) g
where my_ranking=1
Dezelfde techniek kan worden gebruikt om een enkele rij te retourneren uit elke gegevensset met mogelijk dubbele waarden.
Voortschrijdend gemiddelde van de laatste 30 items
Voortschrijdend gemiddelde van de laatste 30 verkochte items
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