Opóźnienie SQL

Opoznienie Sql



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.