Funkcja SQL lag() umożliwia dostęp do poprzedniego wiersza z bieżącego wiersza z określonym przesunięciem. Krótko mówiąc, funkcja lag() umożliwia dostęp do poprzedniego wiersza z bieżącego. Określając wartość przesunięcia, możesz uzyskać dostęp do poprzednich 1, 2, 3 itd. wierszy bieżącego.
Jest to przeciwieństwo funkcji lead(), która umożliwia dostęp do kolejnych wierszy.
Opóźnienie SQL()
Składnia funkcji jest następująca:
LAG(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 wstecz 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 lag(), zacznijmy od skonfigurowania podstawowej tabeli w celach 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);
Po zakończeniu tworzenia i konfiguracji danych przejdźmy do omówienia kilku przykładów.
Przykład 1: Podstawowe użycie
W tym przypadku mamy dostęp do tabeli „produkty”, w której znajdują się informacje o produkcie. Załóżmy, że chcemy pobrać poprzedni kod kreskowy z bieżącego wiersza.
Funkcji lag() możemy użyć w następujący sposób:
wybieraćNazwa produktu,
cena,
opóźnienie (kod kreskowy) ponad (podział według kategorii
Zamów przez
cena rosnąca) jako poprzednia pozycja
z
produkty p;
Podany kod dzieli dane na podstawie kategorii. Następnie pobiera poprzedni kod kreskowy z partycji za pomocą funkcji lag().
Wynikowy wynik jest następujący:
Przykład 2: Ustawianie wartości domyślnej
Jeśli w określonej kolumnie nie ma poprzedniego 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,
opóźnienie (kod kreskowy, 1, „nie dotyczy”) ponad (podział według kategorii
Zamów przez
cena rosnąca) jako poprzednia pozycja
z
produkty p;
Ustawiamy wartość domyślną na „Nie dotyczy”. Powinno to zastąpić dowolną wartość spoza zakresu, jak pokazano na wyjściu:
Przykład 3: Niestandardowa wartość przesunięcia
Załóżmy, że chcesz uzyskać dostęp do dwóch poprzednich wierszy z bieżącego wiersza. Możemy to zrobić, ustawiając wartość przesunięcia na 2.
Przykładowe zapytanie przedstawiono poniżej:
wybieraćNazwa produktu,
cena,
opóźnienie (kod kreskowy, 2, „nie dotyczy”) ponad (podział według kategorii
Zamów przez
cena rosnąca) jako poprzednia pozycja
z
produkty p;
Wyjście:
To zapytanie zwraca poprzednie dwa wiersze w każdej partycji.
Wniosek
W tym samouczku nauczyliśmy się, jak korzystać z funkcji lag(), aby pobrać poprzedni element z bieżącego wiersza.