over(… range between …) (datetime)


BigQueryDb2 (LUW)DerbyH2MariaDBMySQLOracle DBPostgreSQLSQL ServerSQLite200720092011201320152017201920212023⚠ 3.25.0 - 3.50.0ab⊘ 3.5.7 - 3.23.1⚠ 2012 - 2022ab⊘ 2008R2✓ 11 - 17ab⚠ 8.4 - 10ab⊘ 8.3✓ 11gR1 - 23.9✓ 8.0.11 - 9.4.0⊘ 5.0 - 5.7⚠ 11.5 - 12.0.2a⊘ 10.2 - 11.4b⊘ 5.1 - 10.1✓ 1.4.198 - 2.3.232⊘ 1.4.191 - 1.4.197⊘ 10.15.1.3 - 10.17.1.0⚠ 9.7 - 12.1.2ab⚠ 2.0ab
  1. Nur mit Unbounded und current row — nicht wie unten gezeigt mit einem Intervall als Distanz
  2. Alternative: Da numerische Distanzen funktionieren kann man die Zeitangabe in eine Zahl konvertieren und damit arbeiten

Die 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).

dt2020-08-132020-08-142020-08-152020-08-152020-08-17ORDER BY dtRANGEBETWEEN INTERVAL '1' DAY PRECEDINGrange betwAND CURRENT ROWcurrent 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).

Normative Referenzen

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.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2015-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO