Ce face NTH_VALUE()
NTH_VALUE() generalizează FIRST_VALUE(): alegi rândul cu numărul n. Ca la LAST_VALUE(), cadrul implicit se oprește la rândul curent, deci rândurile de dinaintea celui de-al N-lea primesc NULL.
Parametri
| Parametru | Descriere |
|---|---|
expresie |
Valoarea citită. |
n |
Numărul rândului din fereastră, de la 1. |
Ce returnează
Valoarea din rândul n sau NULL.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE vanzari (
agent VARCHAR(20),
oras VARCHAR(20),
luna INT,
suma INT
);
INSERT INTO vanzari VALUES
('Ana', 'Iași', 1, 1200), ('Ana', 'Iași', 2, 1500), ('Ana', 'Iași', 3, 900),
('Dan', 'Cluj', 1, 900), ('Dan', 'Cluj', 2, 900), ('Dan', 'Cluj', 3, 1700),
('Ioana', 'Iași', 1, 2000), ('Ioana', 'Iași', 2, 1100);
Exemplul 1: A doua cea mai mare sumă a fiecărui agent
SELECT DISTINCT agent,
NTH_VALUE(suma, 2) OVER (PARTITION BY agent ORDER BY suma DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS a_doua
FROM vanzari
ORDER BY agent;
Rezultat
+-------+--------+
| agent | a_doua |
+-------+--------+
| Ana | 1200 |
| Dan | 900 |
| Ioana | 1100 |
+-------+--------+
Greșeli frecvente
- Nu definești cadrul complet și primești
NULLpe primele rânduri ale fiecărui grup.
Comenzi înrudite
FIRST_VALUE(): Prima valoare din fereastră, de exemplu prima lună a fiecărui agent.LAST_VALUE(): Ultima valoare din fereastră; are nevoie de un cadru care să includă toate rândurile.DENSE_RANK(): Clasament cu locuri egale la valori egale, fără „găuri” (1, 2, 2, 3).