Microsoft SQL Server
Fensterfunktionen
Suche…
Zentrierter gleitender Durchschnitt
Berechnen Sie einen 6-monatigen gleitenden Durchschnitt (126 Arbeitstage) eines Preises:
SELECT TradeDate, AVG(Px) OVER (ORDER BY TradeDate ROWS BETWEEN 63 PRECEDING AND 63 FOLLOWING) AS PxMovingAverage
FROM HistoricalPrices
Beachten Sie, dass es vor und nach jeder zurückgegebenen Zeile bis zu 63 Zeilen dauern wird. Am Anfang und Ende des TradeDate-Bereichs wird es nicht zentriert: Wenn es das größte TradeDate erreicht, kann es nur 63 vorangehende Werte finden im Durchschnitt enthalten.
Suchen Sie das neueste Element in einer Liste mit zeitgestempelten Ereignissen
In Tabellen, in denen Ereignisse aufgezeichnet werden, gibt es häufig ein Datumsfeld, in dem die Zeit erfasst wird, zu der ein Ereignis stattgefunden hat. Die Suche nach dem neuesten Ereignis kann schwierig sein, da immer zwei Ereignisse mit exakt identischen Zeitstempeln aufgezeichnet wurden. Sie können row_number () over (order by ...) verwenden, um sicherzustellen, dass alle Datensätze eindeutig angeordnet sind, und wählen Sie den obersten Datensatz aus (my_ranking = 1).
select *
from (
select
*,
row_number() over (order by crdate desc) as my_ranking
from sys.sysobjects
) g
where my_ranking=1
Dieselbe Technik kann verwendet werden, um eine einzelne Zeile aus einem Dataset mit möglicherweise doppelten Werten zurückzugeben.
Durchschnitt der letzten 30 Elemente
Durchschnitt der letzten 30 verkauften Artikel
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