Salt la conținutul principal
Modulul 13 · Lecția 4 din 452/57 în curs~12 min
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

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

Exercițiu#sql.m13.l4.e1
Încercări: 0Se încarcă…

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

Se încarcă editorul...
Afișează indiciu

Utilizați LAG(preț) OVER(ORDER BY launched_on ASC)

Soluție disponibilă după 3 încercări

Exercițiu#sql.m13.l4.e2
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
Afișează indiciu

LEAD() împreună cu PARTITION BY și ORDER BY în OVER.

Soluție disponibilă după 3 încercări