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 agoLEAD 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_statusNTH_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
- Klauzule ramki: ROWS a RANGE
- LAG/LEAD z oknami ramki
- Grupowanie za pomocą NTILE i Cume_Dist
- Wzorce raportowania z rzeczywistego świata