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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow