Ce face LAST_VALUE()
LAST_VALUE() dă valoarea din ultimul rând al cadrului. Atenție: cu ORDER BY, cadrul implicit se termină la rândul curent, deci rezultatul este chiar valoarea rândului curent.
Ca să obții ultima valoare din tot grupul, adaugă ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.
Parametri
| Parametru | Descriere |
|---|---|
expresie |
Valoarea citită din ultimul rând al cadrului. |
Ce returnează
Valoarea din ultimul rând al cadrului.
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: Cadrul implicit și cadrul complet
SELECT agent, luna, suma,
LAST_VALUE(suma) OVER (PARTITION BY agent ORDER BY luna) AS cadru_implicit,
LAST_VALUE(suma) OVER (PARTITION BY agent ORDER BY luna
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS ultima_luna
FROM vanzari
WHERE agent = 'Dan'
ORDER BY luna;
Rezultat
+-------+------+------+----------------+-------------+
| agent | luna | suma | cadru_implicit | ultima_luna |
+-------+------+------+----------------+-------------+
| Dan | 1 | 900 | 900 | 1700 |
| Dan | 2 | 900 | 900 | 1700 |
| Dan | 3 | 1700 | 1700 | 1700 |
+-------+------+------+----------------+-------------+
Greșeli frecvente
- Folosești
LAST_VALUE()fără cadru și primești valoarea rândului curent. Este cea mai frecventă confuzie cu funcțiile fereastră.
Comenzi înrudite
FIRST_VALUE(): Prima valoare din fereastră, de exemplu prima lună a fiecărui agent.NTH_VALUE(): Valoarea din al N-lea rând al ferestrei (ex. a doua cea mai mare vânzare).LEAD(): Valoarea din rândul următor (sau cu N rânduri înainte în ordine).