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

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

Funkcja LAST_VALUE w SQL to jedno z narzędzi analitycznych, które może znacząco ułatwić pracę z danymi. Często bywa wykorzystywana w analizie szeregów czasowych, rankingach czy raportach dotyczących ostatnich wartości w zbiorze danych. W tym artykule dokładnie przyjrzymy się zasadzie działania tej funkcji i jej praktycznym zastosowaniom.

Co to jest LAST_VALUE?

LAST_VALUE to funkcja okna w SQL, która zwraca ostatnią wartość w oknie określonym przez klauzulę OVER(). Warto przy tym zauważyć, że „ostatnia” oznacza ostatnią w bieżącym zakresie okna, a nie koniecznie ostatnią w całym zbiorze danych.

Składnia funkcji wygląda następująco:


LAST_VALUE(kolumna) OVER (
    PARTITION BY podział_kolumny 
    ORDER BY kolumna_sortowania 
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)

Warto zwrócić uwagę na ostatni fragment: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. To on powoduje, że funkcja zwraca ostatnią wartość w oknie obejmującym do bieżącego wiersza.

Przykłady zastosowania LAST_VALUE

Aby lepiej zrozumieć działanie funkcji, spójrzmy na przykłady.

Przykład 1: Ostatnia wartość w ramach okna

Załóżmy, że mamy tabelę zamówienia, w której przechowujemy informacje o zamówieniach klientów:


CREATE TABLE zamówienia (
    id INT PRIMARY KEY,
    klient VARCHAR(50),
    wartość DECIMAL(10,2),
    data_zamówienia DATE
);

Dodajmy kilka przykładowych danych:


INSERT INTO zamówienia (id, klient, wartość, data_zamówienia) VALUES 
(1, 'Jan Kowalski', 100.00, '2024-06-01'),
(2, 'Jan Kowalski', 150.00, '2024-06-02'),
(3, 'Jan Kowalski', 200.00, '2024-06-03'),
(4, 'Anna Nowak', 500.00, '2024-06-01'),
(5, 'Anna Nowak', 700.00, '2024-06-02');

Teraz chcemy dla każdego zamówienia uzyskać informację o ostatniej wartości zamówienia dla danego klienta w ramach posortowanych dat:


SELECT 
    id, 
    klient, 
    wartość, 
    data_zamówienia,
    LAST_VALUE(wartość) OVER (
        PARTITION BY klient 
        ORDER BY data_zamówienia 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS ostatnia_wartość
FROM zamówienia;

Wynik:

id klient wartość data_zamówienia ostatnia_wartość
1 Jan Kowalski 100.00 2024-06-01 100.00
2 Jan Kowalski 150.00 2024-06-02 150.00
3 Jan Kowalski 200.00 2024-06-03 200.00
4 Anna Nowak 500.00 2024-06-01 500.00
5 Anna Nowak 700.00 2024-06-02 700.00

Na co uważać przy używaniu LAST_VALUE?

Warto pamiętać o kilku kluczowych aspektach:

  • Zakres okna – domyślnie funkcja LAST_VALUE działa w ramach bieżącego okna, co oznacza, że nie zawsze zwraca ostatni wiersz w całości.
  • Nie mylić z MAX()LAST_VALUE nie zwraca największej wartości, lecz ostatnią w bieżącym zakresie.
  • Dostosowanie okna – jeśli chcemy ostatnią wartość spośród całej partycji, musimy zmienić zakres okna, np. używając ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.

Ostatni punkt jest szczególnie istotny, bo w przeciwnym razie funkcja może nie działać zgodnie z oczekiwaniami.

Podsumowanie

LAST_VALUE w języku SQL to potężne narzędzie, dzięki któremu można analizować ostatnie wartości w ramach okna. Jest szczególnie przydatne w raportowaniu i analizie trendów. Kluczowym aspektem jest odpowiednie ustawienie zakresu okna, by wyniki faktycznie odpowiadały zamierzonym efektom.

 

Inny ciekawy artykuł:

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

KajoDataSpace