sql / expert
Snippet
Logisches Framing mit RANGE und INTERVAL
Die RANGE-Klausel in Window-Funktionen definiert ein logisches Fenster von Zeilen basierend auf den Werten in der ORDER BY-Spalte. Im Gegensatz zu ROWS, das physische Positionen zählt, berücksichtigt RANGE die tatsächlichen Werte (z. B. Daten), was korrekte Berechnungen in gleitenden Fenstern ermöglicht, selbst wenn Lücken oder mehrere Einträge für dasselbe Datum vorhanden sind.
snippet.sql
1
2
3
4
5
6
SELECT order_date, total_amount,SUM(total_amount) OVER (ORDER BY order_dateRANGE BETWEEN INTERVAL '7' DAY PRECEDING AND CURRENT ROW) AS rolling_weekly_sumFROM orders;
Erklärung
1
SUM(total_amount) OVER (
Wendet die Aggregatfunktion SUM als Window-Funktion über eine Menge von Zeilen an.
2
ORDER BY order_date
Bestimmt die Reihenfolge der Zeilen und die Basis für die logische Bereichsberechnung.
3
RANGE BETWEEN INTERVAL '7' DAY PRECEDING
Definiert den Start des Fensters als jede Zeile mit einem Datum innerhalb von 7 Tagen vor der aktuellen Zeile.
4
AND CURRENT ROW
Setzt das Ende des Fensters auf den Wert der aktuellen Zeile.