Jak działa LAG w języku SQL? Przykłady zastosowania

Jak działa LAG w języku SQL? Przykłady zastosowania

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 funkcja LAG().

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:

  1. Analiza trendów sprzedażowych – porównywanie wartości sprzedaży miesiąc do miesiąca, roku do roku.
  2. Śledzenie zmian w statusach zamówień – np. sprawdzanie, kiedy ostatnio zamówienie zmieniło status.
  3. Analiza różnic czasowych – obliczanie czasu, jaki upłynął pomiędzy kolejnymi transakcjami lub zdarzeniami.
  4. Wskaźniki KPI – wyliczanie zmian procentowych w wartościach finansowych lub logistycznych.
  5. 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

KajoDataSpace