Unbounded
und current row
— nicht wie unten gezeigt mit einem Intervall als DistanzDie Over
-Klausel akzeptiert eine Range
-Rahmen, mit dem die Sichtweite der Fensterfunktion relativ zur aktuellen auf Basis einer Differenz der Sortierwerte eingeschränkt wird.
SELECT *, COUNT(*) OVER(ORDER BY dt
RANGE BETWEEN INTERVAL '1' DAY PRECEDING
AND CURRENT ROW)
FROM …
Liefert eine zusätzliche Spalte, die die Anzahl der Zeilen enthält deren Spalte dt
zwischen einem Tag vor dem der aktuellen Zeile liegt (interval '1' day preceding
) und der letzten Zeile die den selben Wert in der Spalte dt
hat (current row
).
Für ein sinnvolle Rahmung benötigt man in der Over
-Klausel eine Order By
-Klausel. Beachte, dass diese Order By
-Klausel die Reihenfolge der Zeilen im Ergebnis nicht festlegt. Wenn man das Ergebnis in derselben Reihenfolge braucht, muss man auch noch eine entsprechende Order By
-Klausel auf der äußerste Abfrageebene verwenden.
Beachte, dass es Systeme gibt die Over(… Range Between …)
mit numerischen Typen unterstützen, nicht aber mit Zeitangaben (temporale Typen).
Sub-Klauseln:
Nicht-Standard Varianten: over(range between…)
(Zeichenketten, mehrere Spalten)
Die Over
-Klausel, inklusive Range Between
mit temporalen Sortierschlüsseln, ist als teil der optionalen Funktion T611, „Elementary OLAP operations“ in ISO/IEC 9075-2:2023 definiert.
20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS, um sukzessive aufzuholen und modern-sql.com am Radar zu behalten.
Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how