0Pricing
SQL Academy · Lekcja

LAG/LEAD z oknami ramki

Łączyć LAG/LEAD z oknami ramki, aby obliczać różnice między okresami i wykrywać luki w szeregach czasowych

LAG/LEAD z oknami ramki to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Podsumowanie LAG/LEAD

LAG(col, n) zwraca wartość sprzed n wierszy względem bieżącego wiersza w oknie. LEAD(col, n) wyszukuje wartość n wierszy dalej.

SELECT day, revenue,
       LAG(revenue) OVER (ORDER BY day) AS prev_day_revenue
FROM daily_revenue;

LAG z wartością domyślną

Trzeci argument to wartość domyślna używana, gdy nie istnieje sąsiedni wiersz:

LAG(revenue, 1, 0) OVER (ORDER BY day)
-- Returns 0 instead of NULL for the very first row.

Obliczanie różnic

Zmiana dzień do dnia:

SELECT day, revenue,
       revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;

Wielokrokowy LAG

Porównaj z wartością sprzed N dni — przydatne przy porównaniach tydzień do tygodnia i rok do roku:

LAG(revenue, 7) OVER (ORDER BY day)   -- 7 days ago
LAG(revenue, 365) OVER (ORDER BY day) -- 1 year ago

LEAD dla przyszłych zdarzeń

Wzorce typu „Jakie jest następne zdarzenie?”:

SELECT id, ts,
       LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) AS next_ts,
       LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) - ts AS gap_to_next
FROM events;

Wzorce dla poszczególnych użytkowników

LAG/LEAD uwzględniają PARTITION BY:

SELECT user_id, ts, action,
       LAG(action) OVER (PARTITION BY user_id ORDER BY ts) AS prev_action
FROM events;
-- prev_action is the user's previous event, not globally.

Wykrywanie zmian stanu

Połącz LAG z CASE:

SELECT id, status,
  CASE WHEN status <> LAG(status) OVER (ORDER BY ts) THEN 'changed' ELSE 'same' END
FROM orders;

FIRST_VALUE/LAST_VALUE

Pierwsza lub ostatnia wartość w obrębie ramki:

FIRST_VALUE(status) OVER (PARTITION BY order_id ORDER BY ts) AS first_status
-- The status when the order was first seen.

LAST_VALUE(status) OVER (
  PARTITION BY order_id ORDER BY ts
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS final_status

NTH_VALUE

N-ta wartość w uporządkowanym oknie:

NTH_VALUE(revenue, 3) OVER (
  ORDER BY revenue DESC
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
-- Third-highest revenue value.

Funkcje ramek dla grup

Połącz LAG z PARTITION BY, aby obsługiwać sąsiednie wiersze w grupach:

SELECT user_id, ts, page,
       LAG(page) OVER (PARTITION BY user_id ORDER BY ts) AS prev_page,
       LEAD(page) OVER (PARTITION BY user_id ORDER BY ts) AS next_page
FROM page_views;

Wydajność

Funkcje okna sortują dane raz na partycję. W przypadku dużych partycji należy utworzyć indeks dla kolumn (PARTITION BY, ORDER BY).

Podsumowanie

LAG/LEAD ułatwiają porównywanie kolejnych wierszy.

  • Wartość domyślna pozwala uniknąć NULL
  • Połącz z CASE, aby wykrywać zmiany stanu
  • FIRST_VALUE/LAST_VALUE/NTH_VALUE uzupełniają tę rodzinę funkcji

Szybki test

Każdy wiersz ma zawierać odstęp czasu (w sekundach) do następnego zdarzenia użytkownika. Której funkcji należy użyć?

Często zadawane pytania

Czy lekcja „LAG/LEAD z oknami ramki” jest bezpłatna?

Tak — pełny tekst „LAG/LEAD z oknami ramki” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „LAG/LEAD z oknami ramki”?

Łączyć LAG/LEAD z oknami ramki, aby obliczać różnice między okresami i wykrywać luki w szeregach czasowych Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „LAG/LEAD z oknami ramki”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Klauzule ramki: ROWS a RANGE
  2. LAG/LEAD z oknami ramki
  3. Grupowanie za pomocą NTILE i Cume_Dist
  4. Wzorce raportowania z rzeczywistego świata
← Powrót do SQL Academy