
Gdy pracuję z danymi w SQL, często zachodzi potrzeba wyciągnięcia pierwszej wartości z danej grupy rekordów. W takich przypadkach funkcja FIRST_VALUE
okazuje się niezwykle przydatna. Pozwala ona na szybkie pobranie pierwszej wartości w uporządkowanym zbiorze danych, co może być wykorzystywane w wielu scenariuszach analitycznych.
Jak działa FIRST_VALUE w języku SQL?
Funkcja FIRST_VALUE
jest funkcją analityczną (okienkową), co oznacza, że działa w ramach określonego okna danych, zwracając pierwszą wartość w danej kolejności. Jej podstawowa składnia wygląda następująco:
FIRST_VALUE(kolumna) OVER (
PARTITION BY podział
ORDER BY kolejność
)
Oto kluczowe elementy tej składni:
- kolumna – kolumna, z której pobierana jest wartość
- PARTITION BY – opcjonalnie dzielimy dane na grupy
- ORDER BY – definiujemy kolejność, według której ustalana jest „pierwsza” wartość
Przykłady zastosowania
Podstawowe użycie
Załóżmy, że mamy tabelę sprzedaze
z następującymi danymi:
ID | Produkt | Rok | Sprzedaż |
---|---|---|---|
1 | Telefon | 2023 | 500 |
2 | Telefon | 2022 | 450 |
3 | Telefon | 2021 | 400 |
4 | Laptop | 2023 | 1000 |
5 | Laptop | 2022 | 900 |
6 | Laptop | 2021 | 850 |
Teraz chcemy dla każdego produktu zobaczyć jego pierwszą odnotowaną sprzedaż w kolejności lat:
SELECT
Produkt,
Rok,
Sprzedaż,
FIRST_VALUE(Sprzedaż) OVER (PARTITION BY Produkt ORDER BY Rok) AS Pierwsza_Sprzedaż
FROM sprzedaze;
Wynik zapytania:
Produkt | Rok | Sprzedaż | Pierwsza_Sprzedaż |
---|---|---|---|
Telefon | 2021 | 400 | 400 |
Telefon | 2022 | 450 | 400 |
Telefon | 2023 | 500 | 400 |
Laptop | 2021 | 850 | 850 |
Laptop | 2022 | 900 | 850 |
Laptop | 2023 | 1000 | 850 |
Jak widać, dla każdego produktu funkcja FIRST_VALUE
pobrała sprzedaż z pierwszego dostępnego roku.
Użycie z dodatkowymi filtrami
Możemy również skorzystać z tej funkcji, aby znaleźć pierwszą wartość tylko dla określonego zakresu danych, np. po 2021 roku:
SELECT
Produkt,
Rok,
Sprzedaż,
FIRST_VALUE(Sprzedaż) OVER (
PARTITION BY Produkt
ORDER BY Rok
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS Pierwsza_Sprzedaż
FROM sprzedaze
WHERE Rok >= 2022;
FIRST_VALUE kontra inne funkcje
W SQL istnieją inne funkcje, które mogą spełniać podobne role, więc warto je porównać:
- MIN() – zwraca najmniejszą wartość w grupie, ale działa inaczej, bo ignoruje kolejność
- ROW_NUMBER() – pozwala przypisać numerację zamiast pobierać wartość
- LAG() – zwraca poprzednią wartość, a nie pierwszą
Podsumowanie
Funkcja FIRST_VALUE
w języku SQL pozwala na pobranie pierwszej wartości w ramach uporządkowanego zbioru danych. Jest to niezwykle przydatne, gdy analizujemy trendy lub porównujemy dane historyczne. Dzięki jej elastyczności można ją łatwo dostosować do różnych sytuacji, co czyni ją jedną z najciekawszych funkcji okienkowych w SQL.
Inny ciekawy artykuł:
Jak działa LAG 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.