NTH_VALUE
Gibt den Wert von column aus der n-ten Zeile des Fensterrahmens zurück.
NTH_VALUE(column, n) OVER ([PARTITION BY ...] [ORDER BY ...] [frame])Parameter
- column
- Spalte oder Ausdruck, dessen Wert zurückgegeben wird
- nINT
- Nummer der Zeile im Rahmen, beginnend mit 1
- PARTITION BYoptional
- Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden
- ORDER BYoptional
- Reihenfolge der Zeilen in der Partition, die bestimmt, welche Zeile die n-te ist
- frameSchlüsselwortoptional
- Fensterrahmen: ROWS oder RANGE BETWEEN start AND end; standardmäßig vom Anfang der Partition bis zur aktuellen Zeile
Rückgabewert
Wert vom Typ von column; NULL, wenn der Rahmen weniger als n Zeilen hat
Beispiele
Zweitältestes Mitglied
SELECT member_name,
birthday,
NTH_VALUE(member_name, 2) OVER (
ORDER BY birthday
) AS second_oldest
FROM FamilyMembers;Zweites Gehalt in jeder Abteilung
SELECT department_id,
name,
salary,
NTH_VALUE(salary, 2) OVER (
PARTITION BY department_id
ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS second_salary
FROM employees;Details
Mit dem Standardrahmen ist die n-te Zeile erst ab ihr selbst sichtbar: Die ersten n - 1 Zeilen der Partition bekommen NULL. Um den Wert für alle Zeilen zu erhalten, setze den Rahmen auf die ganze Partition. NTH_VALUE(column, 1) ist dasselbe wie FIRST_VALUE(column).
Der Rahmen legt fest, welche Zeilen der Partition die Funktion sieht, und wird nach ORDER BY geschrieben: ROWS BETWEEN start AND end zählt Zeilen, während RANGE BETWEEN start AND end die Werte aus ORDER BY verwendet.
Ohne Rahmen gilt die Standardregel. Hat OVER ein ORDER BY, reicht der Rahmen vom Anfang der Partition bis zur aktuellen Zeile, einschließlich der Zeilen mit demselben Wert in ORDER BY. Ohne ORDER BY ist der Rahmen die ganze Partition.