EMZETT.
Login

SQL-Fensterfunktionen

Kurz: Fensterfunktionen rechnen über eine Gruppe verwandter Zeilen, ohne die Zeilen zu einer einzigen zusammenzufassen. So bekommt jede Zeile zum Beispiel ihren Rang oder eine laufende Summe.

Genauer: Im Gegensatz zu GROUP BY, das pro Gruppe eine Zeile liefert, behalten Fensterfunktionen alle Zeilen. Das „Fenster” wird mit OVER (...) festgelegt.

Im Detail

  • Aufbau: funktion() OVER (PARTITION BY spalte ORDER BY spalte). PARTITION BY teilt in Gruppen, ORDER BY ordnet innerhalb.
  • Rangfolge: ROW_NUMBER() (fortlaufend), RANK() (Lücken bei Gleichstand), DENSE_RANK() (ohne Lücken).
  • Nachbarn: LAG(spalte) und LEAD(spalte) holen den Wert der vorigen oder nächsten Zeile, zum Beispiel für Veränderungen gegenüber dem Vormonat.
  • Laufende Summen: SUM(betrag) OVER (ORDER BY datum). Mit ROWS BETWEEN 2 PRECEDING AND CURRENT ROW entsteht ein gleitender Durchschnitt.
  • Typische Aufgabe: Die jeweils neueste Zeile je Kunde: ROW_NUMBER() OVER (PARTITION BY kunde ORDER BY datum DESC) und dann = 1 filtern.
  • Hinweis: Fensterfunktionen sind in WHERE nicht erlaubt. Dafür eine Unterabfrage oder CTE verwenden.

Siehe auch: SQL