Weder die Where
- noch die Having
-Klausel akzeptieren Fensterfunktionen – die Qualify
-Klausel jedoch schon.
SELECT *
FROM …
QUALIFY ROW_NUMBER() OVER(PARTITION BY … ORDER BY …) <= 3
Das Beispiel zeigt eine Top-N-pro-Gruppe-Abfrage: Sie liefert die erste drei Zeilen jeder Partition.
Eine besser unterstützte Syntax für diese Abfrage ermittelt die Fensterfunktion in einer Unterabfrage und wählt die passenden Zeilen in der äußeren Where
-Klausel aus.
SELECT *
FROM (SELECT *
, ROW_NUMBER() OVER(PARTITION BY … ORDER BY …) AS rn
FROM …
) AS sq
WHERE sq.rn <= 3
Beachte, dass diese Abfrage die Extra-Spalte rn
liefert.
Die Qualify
-Klausel ist nicht im internationalen SQL-Standard ISO/IEC 9075-2:2023.
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