Ce face FIRST_VALUE()
FIRST_VALUE() returnează valoarea din primul rând al ferestrei, în ordinea din ORDER BY. Este util pentru comparații cu punctul de pornire.
Parametri
| Parametru | Descriere |
|---|---|
expresie |
Valoarea citită din primul rând. |
Ce returnează
Valoarea din primul rând al ferestrei.
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: Evoluția față de prima lună
SELECT agent, luna, suma,
FIRST_VALUE(suma) OVER (PARTITION BY agent ORDER BY luna) AS prima_luna,
suma - FIRST_VALUE(suma) OVER (PARTITION BY agent ORDER BY luna) AS fata_de_start
FROM vanzari
ORDER BY agent, luna;
Rezultat
+-------+------+------+------------+---------------+
| agent | luna | suma | prima_luna | fata_de_start |
+-------+------+------+------------+---------------+
| Ana | 1 | 1200 | 1200 | 0 |
| Ana | 2 | 1500 | 1200 | 300 |
| Ana | 3 | 900 | 1200 | -300 |
| Dan | 1 | 900 | 900 | 0 |
| Dan | 2 | 900 | 900 | 0 |
| Dan | 3 | 1700 | 900 | 800 |
| Ioana | 1 | 2000 | 2000 | 0 |
| Ioana | 2 | 1100 | 2000 | -900 |
+-------+------+------+------------+---------------+
Greșeli frecvente
- Folosești
FIRST_VALUE()fărăORDER BYînOVER. Ordinea rândurilor nu este garantată, deci „primul” poate fi oricare.
Comenzi înrudite
LAST_VALUE(): Ultima valoare din fereastră; are nevoie de un cadru care să includă toate rândurile.NTH_VALUE(): Valoarea din al N-lea rând al ferestrei (ex. a doua cea mai mare vânzare).LAG(): Valoarea din rândul anterior (sau cu N rânduri înainte), ca să compari cu perioada trecută.