LEAD() în MySQL

Valoarea din rândul următor (sau cu N rânduri înainte în ordine).

Sintaxă
LEAD(expresie[, n[, implicit]]) OVER ([PARTITION BY ...] ORDER BY ...)

Ce face LEAD()

LEAD() este pereche cu LAG(), dar „se uită înainte”. Este util pentru durate (de la acest eveniment până la următorul) sau pentru a afișa ce urmează.

Parametri

Parametru Descriere
expresie Valoarea citită din rândul următor.
n Opțional. Cu câte rânduri înainte (implicit 1).
implicit Opțional. Valoarea când nu există rând următor.

Ce returnează

Valoarea din rândul următor.

Exemple

Exemplul 1: Câte zile au trecut până la următoarea comandă

CREATE TABLE comenzi (client VARCHAR(10), data DATE);
INSERT INTO comenzi VALUES ('Ana', '2026-09-01'), ('Ana', '2026-09-20'), ('Ana', '2026-10-15'), ('Dan', '2026-10-01');

SELECT client, data,
       LEAD(data) OVER (PARTITION BY client ORDER BY data) AS urmatoarea,
       DATEDIFF(LEAD(data) OVER (PARTITION BY client ORDER BY data), data) AS zile
FROM comenzi
ORDER BY client, data;

Rezultat

+--------+------------+------------+------+
| client | data       | urmatoarea | zile |
+--------+------------+------------+------+
| Ana    | 2026-09-01 | 2026-09-20 |   19 |
| Ana    | 2026-09-20 | 2026-10-15 |   25 |
| Ana    | 2026-10-15 | NULL       | NULL |
| Dan    | 2026-10-01 | NULL       | NULL |
+--------+------------+------------+------+

Greșeli frecvente

  • Te aștepți ca ultimul rând să aibă o valoare. Nu există rând următor, deci rezultatul este NULL, dacă nu dai o valoare implicită.

Comenzi înrudite

  • LAG(): Valoarea din rândul anterior (sau cu N rânduri înainte), ca să compari cu perioada trecută.
  • LAST_VALUE(): Ultima valoare din fereastră; are nevoie de un cadru care să includă toate rândurile.
  • DATEDIFF(): Numărul de zile dintre două date (data1 – data2), ignorând orele.