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 BYteilt in Gruppen,ORDER BYordnet innerhalb. - Rangfolge:
ROW_NUMBER()(fortlaufend),RANK()(Lücken bei Gleichstand),DENSE_RANK()(ohne Lücken). - Nachbarn:
LAG(spalte)undLEAD(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). MitROWS BETWEEN 2 PRECEDING AND CURRENT ROWentsteht ein gleitender Durchschnitt. - Typische Aufgabe: Die jeweils neueste Zeile je Kunde:
ROW_NUMBER() OVER (PARTITION BY kunde ORDER BY datum DESC)und dann= 1filtern. - Hinweis: Fensterfunktionen sind in
WHEREnicht erlaubt. Dafür eine Unterabfrage oder CTE verwenden.
Siehe auch: SQL