Funkcja SQL lead() umożliwia dostęp do następnego wiersza z bieżącego wiersza z określonym przesunięciem. Krótko mówiąc, funkcja lead() umożliwia dostęp do następnego wiersza z bieżącego. Określając wartość przesunięcia, możesz uzyskać dostęp do kolejnych 1, 2, 3 itd. wierszy z bieżącego.
Jest to przeciwieństwo funkcji lag(), która umożliwia dostęp do poprzednich wierszy.
Funkcja SQL Lead().
Składnia funkcji jest następująca:
LEAD(wyrażenie_wartości, przesunięcie [, domyślne])
NAD (
[PODZIAŁ WEDŁUG wyrażenia_partycji]
ZAMÓW WEDŁUG wyrażenia_sortowania [ASC | OPIS]
);
Oto obsługiwane argumenty:
- wyrażenie_wartości – Określa wartość zwracaną z poprzedniego wiersza. Wyrażenie musi mieć jedną wartość.
- zrównoważyć – Określa, do ilu wierszy dalej od bieżącego wiersza można uzyskać dostęp.
- domyślny – Ustawia wartość domyślną, jeśli przesunięcie znajduje się poza zakresem partycji. Domyślnie wartość jest ustawiona na NULL.
- Podział według – Określa sposób partycjonowania danych.
- Zamów przez – Ustawia format kolejności wierszy w każdej partycji.
Przykładowa konfiguracja danych
Zanim zagłębimy się w działanie funkcji lead(), zacznijmy od skonfigurowania podstawowej tabeli do celów demonstracyjnych.
UTWÓRZ TABELI produktów (
id_produktu INT KLUCZ PODSTAWOWY AUTO_INCREMENT,
nazwa_produktu VARCHAR(255),
kategoria VARCHAR(255),
cena DZIESIĘTNA(10, 2),
ilość INT,
data_wygaśnięcia DATA,
kod kreskowy BIGINT
);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Kapelusz Szefa Kuchni 25 cm”,
'piekarnia',
24,67,
57,
'2023-09-09',
2854509564204);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Jaja przepiórcze – konserwowe”,
'spiżarnia',
17,99,
67,
„2023-09-29”,
1708039594250);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Kawa - Nog Jajeczny Capuccino”,
'piekarnia',
92,53,
10,
„2023-09-22”,
8704051853058);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Gruszka - Kłująca”,
'piekarnia',
65,29,
48,
„2023-08-23”,
5174927442238);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Makaron - Anielskie Włosy”,
'spiżarnia',
48,38,
59,
'2023-08-05',
8008123704782);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Wino – Prosecco Valdobiaddene”,
'produkować',
44.18,
3,
'2023-03-13',
6470981735653);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Ciasta — Francuskie Mini Mieszane”,
'spiżarnia',
36,73,
52,
'2023-05-29',
5963886298051);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Pomarańczowy – konserwowy, mandaryński”,
'produkować',
65,0,
1,
„2023-04-20”,
6131761721332);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Wieprzowina – Łopatka”,
'produkować',
55,55,
73,
'2023-05-01',
9343592107125);
wstawić
do
produkty (nazwa_produktu,
Kategoria,
cena,
ilość,
termin ważności,
kod kreskowy)
wartości („Dc Hikiage Hira Huba”,
'produkować',
56,29,
53,
'2023-04-14',
3354910667072);
Przykład 1:
W tym przypadku mamy dostęp do tabeli „produkty”, w której znajdują się informacje o produkcie. Załóżmy, że chcemy uzyskać kolejny kod kreskowy z bieżącego wiersza.
Funkcji lead() możemy użyć w następujący sposób:
Załóżmy, że mamy tabelę zawierającą następujące informacje o pracownikach:
wybieraćNazwa produktu,
cena,
lead(kod kreskowy) over (podział według kategorii
Zamów przez
cena rosnąca) jako next_item
z
produkty p;
Podany kod dzieli dane na podstawie kategorii. Następnie pobiera następny kod kreskowy z partycji za pomocą funkcji lead().
Wynikowy wynik jest następujący:
Przykład 2:
Jeśli w określonej kolumnie nie ma następnego wiersza (poza granicą), funkcja ustawia wartość na NULL, jak pokazano w poprzednim przykładzie.
Aby ustawić wartość domyślną dla dostępu spoza zakresu, możemy wykonać następujące czynności:
wybieraćNazwa produktu,
cena,
lead(kod kreskowy, 1, 'nie dotyczy') over (podział według kategorii
Zamów przez
cena rosnąca) jako next_item
z
produkty p;
Ustawiamy wartość domyślną na „Nie dotyczy”. Powinno to zastąpić każdą wartość wykraczającą poza zakres, jak pokazano w następujących wynikach:
NOTATKA : Ustawienie przesunięcia na 1 jest podobne do nieokreślenia żadnej wartości.
Przykład 3:
Załóżmy, że chcesz uzyskać dostęp do dwóch kolejnych wierszy bieżącego wiersza. Możemy to zrobić, ustawiając wartość przesunięcia na 2.
Przykładowe zapytanie przedstawiono poniżej:
wybieraćNazwa produktu,
cena,
lead(kod kreskowy, 2, 'nie dotyczy') over (podział według kategorii
Zamów przez
cena rosnąca) jako next_item
z
produkty p;
To zapytanie zwraca kolejne dwa wiersze w każdej partycji, jak pokazano poniżej:
Masz to!
Wniosek
W tym samouczku nauczyliśmy się, jak korzystać z funkcji lead(), aby pobrać następny element z bieżącego wiersza.