
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
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.