
Funkcja LAG()
w języku SQL to jedno z potężniejszych narzędzi analitycznych, które pozwala na dostęp do wartości z poprzedniego wiersza w ramach danej grupy danych. W praktyce oznacza to, że możemy łatwo porównywać wartości między kolejnymi rekordami, co przydaje się w analizie trendów, śledzeniu zmian czy obliczeniach różnicowych.
Jak działa LAG w języku SQL?
Podstawowe działanie funkcji LAG()
polega na zwróceniu wartości z poprzedniego wiersza bez konieczności wykonywania złożonych operacji na zbiorze danych. Funkcja ta jest często stosowana w raportowaniu oraz analizie danych historycznych.
Podstawowa składnia funkcji LAG()
wygląda następująco:
SELECT
kolumna,
LAG(kolumna, przesunięcie, wartość_domyslna) OVER (PARTITION BY kolumna_grupująca ORDER BY kolumna_sortująca) AS poprzednia_wartość
FROM tabela;
Gdzie:
kolumna
– wartość, do której chcemy uzyskać dostęp z poprzedniego wiersza.przesunięcie
– liczba wierszy wstecz, które chcemy przeanalizować (domyślnie 1).wartość_domyslna
– opcjonalna wartość zwracana, jeśli nie istnieje wcześniejszy wiersz.PARTITION BY
– opcjonalne podzielenie danych na grupy.ORDER BY
– definiuje kolejność względem której obliczana jest funkcjaLAG()
.
Przykład użycia funkcji LAG w SQL
Załóżmy, że mamy tabelę sprzedaz
zawierającą dane na temat przychodów firmy w poszczególnych miesiącach:
CREATE TABLE sprzedaz (
id INT PRIMARY KEY,
rok INT,
miesiac INT,
przychod DECIMAL(10,2)
);
Teraz dodajmy przykładowe dane:
INSERT INTO sprzedaz (id, rok, miesiac, przychod) VALUES
(1, 2024, 1, 10000),
(2, 2024, 2, 12000),
(3, 2024, 3, 9000),
(4, 2024, 4, 15000),
(5, 2024, 5, 13000);
Chcemy teraz dodać do wyniku kolumnę, która pokaże przychód z poprzedniego miesiąca:
SELECT
rok,
miesiac,
przychod,
LAG(przychod, 1, 0) OVER (ORDER BY rok, miesiac) AS poprzedni_przychod
FROM sprzedaz;
Wynik zapytania będzie wyglądać następująco:
rok | miesiac | przychod | poprzedni_przychod |
---|---|---|---|
2024 | 1 | 10000 | 0 |
2024 | 2 | 12000 | 10000 |
2024 | 3 | 9000 | 12000 |
2024 | 4 | 15000 | 9000 |
2024 | 5 | 13000 | 15000 |
Warto zauważyć, że pierwsza wartość w kolumnie poprzedni_przychod
wynosi 0
, ponieważ nie ma danych z poprzedniego miesiąca i ustawiliśmy wartość domyślną jako 0
.
Praktyczne zastosowania LAG
Funkcja LAG()
jest bardzo użyteczna, gdy trzeba analizować zmiany danych w czasie lub porównywać wartości sąsiadujących rekordów. Oto kilka przykładów jej praktycznego zastosowania:
- Analiza trendów sprzedażowych – porównywanie wartości sprzedaży miesiąc do miesiąca, roku do roku.
- Śledzenie zmian w statusach zamówień – np. sprawdzanie, kiedy ostatnio zamówienie zmieniło status.
- Analiza różnic czasowych – obliczanie czasu, jaki upłynął pomiędzy kolejnymi transakcjami lub zdarzeniami.
- Wskaźniki KPI – wyliczanie zmian procentowych w wartościach finansowych lub logistycznych.
- Porównania między kolejnymi wpisami w logach – monitorowanie systemów informatycznych pod kątem anomalii.
LAG vs. LEAD – jaka jest różnica?
Warto wspomnieć, że funkcja LAG()
ma swoje przeciwieństwo – funkcję LEAD()
. Działa ona podobnie, ale zamiast zwracać wartość z poprzedniego wiersza, zwraca wartość z następnego wiersza.
SELECT
przychod,
LAG(przychod, 1) OVER (ORDER BY miesiac) AS poprzedni_przychod,
LEAD(przychod, 1) OVER (ORDER BY miesiac) AS nastepny_przychod
FROM sprzedaz;
Dzięki temu możemy jednocześnie porównywać wartości z poprzedniego oraz następnego wiersza, co bywa bardzo przydatne w analizach porównawczych.
Podsumowanie
Funkcja LAG()
w języku SQL to niezwykle użyteczne narzędzie do analizy danych w kontekście czasowym. Pozwala w prosty sposób uzyskać dostęp do wartości z poprzedniego wiersza, co jest nieocenione w raportach porównawczych, prognozach czy analizach trendów.
Warto pamiętać, że funkcja ta wymaga odpowiedniego sortowania danych i opcjonalnie może być używana z PARTITION BY
, aby analizować informacje w określonych grupach.
W praktyce LAG()
pomaga oszczędzić czas i upraszcza kod SQL, eliminując konieczność stosowania skomplikowanych podzapytań czy łączenia tabel.
Inny ciekawy artykuł:
Jak działa LEAD w języku SQL? Przykłady zastosowania
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.