Lecții din modul (4/4)
Schimbări: LAG și LEAD
Schimbări: LAG și LEAD
În datele secvențiale și bazate pe timp, adesea trebuie să comparați rândul curent cu cel din ziua precedentă. În SQL „standard”, a face acest lucru necesită auto-aderări foarte periculoase (și foarte lente).
Funcțiile LAG() (rândul anterior) și LEAD() (rândul următor) rezolvă exact această problemă cu agilitate și eleganță extreme.
Privind spre Trecut și Viitor
SELECT
created_at,
total_amount,
LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;În exemplu, fiecare rând va transporta în mod convenabil suma produsă de același tabel, deplasată înainte cu un rând (înapoi în timp). Putem scădea cu ușurință total_amount - LAG(...) pentru a calcula diferența sau modificările procentuale de la o lună la o lună!
De asemenea, LEAD() va extrage valoarea din rândul de sub cel curent.
Din tabelul „produse”, extrageți „id”, „launched_on”, „price” și adăugați „prev_price”, adică „prețul” produsului considerat în mod logic cel „anterior”, în ordine crescătoare „lansat_on”.
Afișează indiciu
Utilizați LAG(preț) OVER(ORDER BY launched_on ASC)
Soluție disponibilă după 3 încercări
Cum ați calcula salturile de evaluare pentru fiecare utilizator? Simulați-l: din tabelul „reviews” extrageți „customer_id”, „created_at”, „rating” și „next_rating” (următoarea recenzie a aceluiași client de-a lungul timpului). Deci, partiționați după „customer_id”, ordonați după „created_at” și utilizați funcția de fereastră potrivită pentru a vedea înainte.
Afișează indiciu
LEAD() împreună cu PARTITION BY și ORDER BY în OVER.
Soluție disponibilă după 3 încercări