LAST_VALUE() în MySQL

Ultima valoare din fereastră; are nevoie de un cadru care să includă toate rândurile.

Sintaxă
LAST_VALUE(expresie) OVER (... ORDER BY ... ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)

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).