Przejdź do głównej treści
eLearner.app
Moduł 13 · Lekcja 4 z 452/57 w kursie~12 min
Lekcje modułu (4/4)

Przesunięcia: LAG i LEAD

Zmiany: LAG i LEAD

W przypadku danych sekwencyjnych i czasowych często zachodzi potrzeba porównania bieżącego wiersza z wierszem z poprzedniego dnia. W „standardowym” SQL wymaga to bardzo niebezpiecznych (i bardzo wolnych) samozłączeń.

Funkcje LAG() (poprzedni wiersz) i LEAD() (następny wiersz) rozwiązują dokładnie ten problem z niezwykłą zwinnością i elegancją.

Patrząc w przeszłość i przyszłość

SQL
SELECT
  created_at,
  total_amount,
  LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;

W przykładzie każdy wiersz będzie wygodnie zawierał ilość wyprodukowaną przez tę samą tabelę, przesuniętą o jeden wiersz do przodu (do tyłu w czasie). Możemy łatwo odjąć total_amount - LAG(...), aby obliczyć różnicę lub zmiany procentowe z miesiąca na miesiąc!

Podobnie LEAD() pobierze wartość z wiersza znajdującego się tuż pod bieżącym.

Ćwiczenie#sql.m13.l4.e1
Próby: 0Ładowanie...

Z tabeli „produkty” wyodrębnij „id”, „launched_on”, „cena” i dodaj „prev_price”, tj. „cenę” produktu logicznie uważaną za „poprzedni”, w rosnącej kolejności „launched_on”.

Ładowanie edytora...
Pokaż wskazówkę

Użyj LAG(cena) OVER(ZAMÓW PRZEZ uruchomienie_na ASC)

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#sql.m13.l4.e2
Próby: 0Ładowanie...

Jak obliczysz skoki ocen na indywidualnego użytkownika? Zasymuluj to: z tabeli „recenzje” wyodrębnij „customer_id”, „created_at”, „rating” i „next_rating” (następna recenzja tego samego klienta w określonym czasie). Zatem podziel według „customer_id”, zamów według „created_at” i użyj odpowiedniej funkcji okna, aby zajrzeć do przodu.

Ładowanie edytora...
Pokaż wskazówkę

LEAD() razem z PARTITION BY i ORDER BY w OVER.

Rozwiązanie dostępne po 3 próbach