Gleitende Mittelwerte über ein verschiebbares Fenster
Gleitende Mittelwerte über N Perioden mit BETWEEN PRECEDING AND CURRENT ROW berechnen
Gleitende Mittelwerte über ein verschiebbares Fenster ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Die Frage zum gleitenden Durchschnitt
Analysten werden ständig gefragt: „Berechnen Sie einen gleitenden 7-Tage-Durchschnitt des Umsatzes.“ Ein gleitender (oder rollierender) Durchschnitt glättet verrauschte Tagesdaten, indem jeder Wert zusammen mit seinen zeitnahen Nachbarwerten gemittelt wird.
Die Antwort auf Interviewniveau ist eine Fensterfunktion mit AVG und einem expliziten gleitenden Frame. Entscheidend ist, die Frame-Grenzen so zu wählen, dass das Fenster korrekt entlang der Sortierung gleitet.
Das Grundmuster
Ein gleitender Durchschnitt ist AVG(value) OVER (ORDER BY ... ROWS BETWEEN n PRECEDING AND CURRENT ROW). Der Frame gleitet: In jeder Zeile umfasst er die aktuelle Zeile und die vorherigen n Zeilen.
Für ein 7-Tage-Fenster über täglichen Zeilen gehen Sie 6 Zeilen zurück und schließen die aktuelle Zeile ein, sodass insgesamt 7 Zeilen enthalten sind. Dieser Off-by-one-Fehler ist der häufigste Fehler, auf den Interviewer achten.
SELECT
sale_date,
amount,
AVG(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS moving_avg_7d
FROM daily_sales;Die Fenstergröße korrekt berechnen
Die Fenstergröße entspricht preceding + 1 (die +1 steht für die aktuelle Zeile). Also:
- Fenster mit 3 Zeilen:
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW - Fenster mit 7 Zeilen:
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW - Fenster mit 30 Zeilen:
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW
Sprechen Sie diese Rechnung im Vorstellungsgespräch laut aus, damit das Gremium sieht, dass Sie bewusst vorgehen und nicht raten.
Nachlaufende und zentrierte Fenster
Das obige Beispiel ist ein nachlaufender Durchschnitt: Er betrachtet nur die vorherigen Werte und ist daher kausal und für Prognose-Dashboards unproblematisch.
Ein zentrierter Durchschnitt betrachtet beide Richtungen, etwa ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING für ein zentriertes Fenster mit 7 Zeilen. Zentrierte Fenster glätten symmetrischer, können aber bei den neuesten Zeilen nicht in Echtzeit berechnet werden. Nennen Sie, welche Variante der Anwendungsfall erfordert.
SELECT
sale_date,
AVG(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centered_avg_7
FROM daily_sales;Der Effekt am Fensterrand
Ganz am Anfang der Daten ist das vollständige Fenster noch nicht vorhanden. Für Zeile 1 eines nachlaufenden 7-Tage-Durchschnitts ist nur 1 Zeile verfügbar, daher bildet AVG den Durchschnitt nur dieses einen Werts.
Das bedeutet, dass frühe Zeilen einen Aufwärm-Durchschnitt über weniger Zeilen anzeigen. Interviewer fragen häufig, wie damit umzugehen ist. Es gibt zwei Möglichkeiten: Sie akzeptieren das Teilfenster oder unterdrücken frühe Zeilen, indem Sie ein vollständiges Fenster voraussetzen.
Teilfenster unterdrücken
Wenn das Unternehmen bis zum Vorliegen eines vollständigen Fensters NULL wünscht, verwenden Sie COUNT(*) über denselben Frame und setzen Sie kurze Fenster mit einem CASE-Ausdruck auf NULL.
Das ist ein ausgefeiltes Detail, das zeigt, dass Sie über die korrekte Behandlung der Grenzen nachgedacht haben – ein Aspekt, den viele Bewerber übergehen.
SELECT
sale_date,
CASE WHEN COUNT(*) OVER w = 7
THEN AVG(amount) OVER w
END AS moving_avg_7d
FROM daily_sales
WINDOW w AS (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
);Einen Frame mit WINDOW wiederverwenden
Die vorherige Abfrage verwendete eine benannte WINDOW-Klausel. Wenn derselbe Frame mehrfach vorkommt, halten Sie die Abfrage mit einer einmaligen Definition als WINDOW w AS (...) und Verweisen über OVER w DRY und lesbar.
Postgres, MySQL 8 und SQL Server unterstützen benannte Fenster. Wenn Sie im Vorstellungsgespräch eines verwenden, signalisiert das Vertrautheit, die über das bloße Kopieren von Fensterfunktionen hinausgeht.
SELECT
sale_date,
AVG(amount) OVER w AS avg_7d,
SUM(amount) OVER w AS sum_7d
FROM daily_sales
WINDOW w AS (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
);Fallstrick: Kalendertage vs. Zeilen
Eine subtile Falle: Wenn in der Tabelle Tage fehlen, umfasst ROWS 6 PRECEDING die letzten 7 aufgezeichneten Zeilen, die sich über mehr als 7 Kalendertage erstrecken können.
Für einen echten kalenderbasierten 7-Tage-Durchschnitt, der Lücken berücksichtigt, verwenden Sie RANGE mit einem Intervall-Offset oder verknüpfen Sie die Daten zunächst mit einer vollständigen Datumsreihe, sodass für jeden Tag eine Zeile vorhanden ist. Diese Unterscheidung zu benennen, ist genau die ROWS-vs.-RANGE-Erkenntnis aus der vorherigen Lektion.
SELECT
sale_date,
AVG(amount) OVER (
ORDER BY sale_date
RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW
) AS calendar_avg_7d
FROM daily_sales;Gleitende Durchschnitte pro Gruppe
Wie bei laufenden Summen müssen gleitende Durchschnitte normalerweise pro Entität zurückgesetzt werden. Fügen Sie PARTITION BY hinzu, damit jedes Produkt oder Geschäft ein eigenes gleitendes Fenster erhält, das nicht über Gruppengrenzen hinweg übergreift.
Frame und Sortierung werden innerhalb jeder Partition unabhängig angewendet, sodass die ersten Zeilen jeder Gruppe korrekt mit ihrer eigenen Aufwärmphase beginnen.
SELECT
product_id,
sale_date,
AVG(amount) OVER (
PARTITION BY product_id
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS product_ma_7d
FROM daily_sales;Glättung in der Praxis
Warum lohnt sich das? Der Tagesumsatz ist sprunghaft; ein gleitender Durchschnitt macht den Trend sichtbar. Eine häufige Antwort von Analysten kombiniert den Rohwert mit seiner geglätteten Linie, sodass das Dashboard sowohl Signal als auch Rauschen zeigt.
Sie können außerdem einen kurzen und einen langen gleitenden Durchschnitt vergleichen (z. B. 7 Tage vs. 30 Tage), um Momentum zu erkennen – das SQL-Pendant zu einem Moving-Average-Crossover.
SELECT
sale_date,
amount,
AVG(amount) OVER (ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma_7,
AVG(amount) OVER (ORDER BY sale_date
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS ma_30
FROM daily_sales;Checkliste fürs Vorstellungsgespräch
Um eine Frage zu gleitenden Durchschnitten überzeugend zu beantworten, gehen Sie auf Folgendes ein:
AVG OVER (ORDER BY ... ROWS BETWEEN n-1 PRECEDING AND CURRENT ROW).- Fenstergröße = preceding + 1.
- Auswahl zwischen nachlaufend und zentriert.
- Aufwärmphase des Teilfensters und deren Unterdrückung.
ROWSvs.RANGEbei fehlenden Tagen.PARTITION BY, um pro Entität zurückzusetzen.
Kurzer Test
Wählen Sie den Frame für einen nachlaufenden gleitenden 7-Tage-Durchschnitt über täglichen Zeilen.
Zusammenfassung: Gleitende Durchschnitte
Ein gleitender Durchschnitt ist AVG(value) OVER (ORDER BY ... ROWS BETWEEN n-1 PRECEDING AND CURRENT ROW), wobei die Fenstergröße der Anzahl der vorherigen Zeilen plus eins entspricht. Wählen Sie je nach Anwendungsfall ein nachlaufendes oder zentriertes Fenster, behandeln Sie die Aufwärmzeilen mit einer COUNT-Prüfung und wechseln Sie zu einem RANGE-Intervall, wenn Kalenderlücken relevant sind.
Setzen Sie mit PARTITION BY pro Entität zurück und verwenden Sie Frames mit einem benannten WINDOW wieder. Als Nächstes wandeln wir kumulative Summen mit dem laufenden Anteil am Gesamtwert in Prozentsätze um.
Häufig gestellte Fragen
Ist die Lektion „Gleitende Mittelwerte über ein verschiebbares Fenster“ kostenlos?
Ja — der vollständige Text von „Gleitende Mittelwerte über ein verschiebbares Fenster“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Gleitende Mittelwerte über ein verschiebbares Fenster“?
Gleitende Mittelwerte über N Perioden mit BETWEEN PRECEDING AND CURRENT ROW berechnen Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Gleitende Mittelwerte über ein verschiebbares Fenster“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Kumulative Summen mit Fensterrahmen
- Fensterrahmen mit ROWS oder RANGE
- Gleitende Mittelwerte über ein verschiebbares Fenster
- Kumulative Verteilung und Anteil an der Gesamtsumme