Funkcija SQL lag() vam omogoča dostop do prejšnje vrstice iz trenutne vrstice z določenim odmikom. Skratka, funkcija lag() vam omogoča dostop do prejšnje vrstice iz trenutne. Če določite vrednost odmika, lahko iz trenutne vrstice dostopate do prejšnjih 1, 2, 3 itd.
Je nasprotje funkcije lead(), ki vam omogoča dostop do naslednjih vrstic.
SQL Lag()
Sintaksa funkcije je naslednja:
LAG(izraz_vrednosti, odmik [, privzeto])
NAD (
[PARTICIJA PO particijskem_izrazu]
UREDI PO izrazu_razvrščanja [ASC | DESC]
);
Podprti argumenti so naslednji:
- vrednostni_izraz – Podaja vrnjeno vrednost prejšnje vrstice. Izraz mora imeti eno vrednost.
- odmik – Določa, koliko vrstic nazaj od trenutne vrstice do dostopa.
- privzeto – Nastavi privzeto vrednost, če je odmik zunaj obsega particije. Privzeto je vrednost nastavljena na NULL.
- Razdelitev po – Določa, kako razdeliti podatke.
- Naroči po – Nastavi obliko vrstnega reda za vrstice v vsaki particiji.
Vzorčna nastavitev podatkov
Preden se poglobimo v delovanje funkcije lag(), začnimo z nastavitvijo osnovne tabele za namene predstavitve.
CREATE TABLE izdelki (
product_id INT PRIMARY KEY AUTO_INCREMENT,
ime_izdelka VARCHAR(255),
kategorija VARCHAR(255),
cena DECIMAL(10, 2),
količina INT,
datum_izteka DATE,
črtna koda BIGINT
);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Kuharska kapa 25 cm',
'pekarna',
24.67,
57,
'2023-09-09',
2854509564204);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Prepeličja jajca - konzervirana',
'shramba',
17,99,
67,
'29.09.2023',
1708039594250);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Coffee - Egg Nog Capuccino',
'pekarna',
92,53,
10,
'22.9.2023',
8704051853058);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Hruška - Bodeča',
'pekarna',
65,29,
48,
'2023-08-23',
5174927442238);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Pasta - Angel Hair',
'shramba',
48,38,
59,
'2023-08-05',
8008123704782);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Vino - Prosecco Valdobiaddene',
'proizvajati',
44.18,
3,
'13.3.2023',
6470981735653);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Pecivo - francosko mini sortirano',
'shramba',
36,73,
52,
'2023-05-29',
5963886298051);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('pomaranča - konzervirana, mandarina',
'proizvajati',
65,0,
1,
'20.4.2023',
6131761721332);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Svinjina - Pleče',
'proizvajati',
55,55,
73,
'2023-05-01',
9343592107125);
vstavi
v
izdelki (ime_izdelka,
kategorija,
cena,
količina,
Datum veljavnosti,
črtna koda)
vrednosti ('Dc Hikiage Hira Huba',
'proizvajati',
56,29,
53,
'14.4.2023',
3354910667072);
Ko je ustvarjanje in nastavitev podatkov končano, nadaljujmo z razpravo o nekaj primerih.
Primer 1: Osnovna uporaba
V tem primeru imamo dostop do tabele »izdelki«, ki vsebuje podatke o izdelku. Recimo, da želimo pridobiti prejšnjo črtno kodo iz trenutne vrstice.
Funkcijo lag() lahko uporabimo na naslednji način:
izberiteime izdelka,
cena,
zamik (črtna koda) čez (razdelitev po kategoriji
naročilo po
cena asc) kot prejšnji_postavka
od
izdelki p;
Podana koda razdeli podatke glede na kategorijo. Nato pridobi prejšnjo črtno kodo v particiji s funkcijo lag().
Rezultat je naslednji:
Primer 2: Nastavitev privzete vrednosti
Če v določenem stolpcu ni prejšnje vrstice (izven meja), funkcija nastavi vrednost na NULL, kot je prikazano v prejšnjem primeru.
Če želite nastaviti privzeto vrednost za kateri koli dostop zunaj obsega, lahko naredimo naslednje:
izberiteime izdelka,
cena,
lag(črtna koda, 1, 'N/A') nad (razdelitev po kategoriji
naročilo po
cena asc) kot prejšnji_postavka
od
izdelki p;
Privzeto vrednost smo nastavili na »N/A«. To bi moralo nadomestiti vse vrednosti izven meja, kot je prikazano v izhodu:
3. primer: vrednost odmika po meri
Recimo, da želite iz trenutne vrstice dostopati do prejšnjih dveh vrstic. To lahko storimo tako, da vrednost odmika nastavimo na 2.
Primer poizvedbe je prikazan v nadaljevanju:
izberiteime izdelka,
cena,
lag(črtna koda, 2, 'N/A') nad (razdelitev po kategoriji
naročilo po
cena asc) kot prejšnji_postavka
od
izdelki p;
Izhod:
Ta poizvedba vrne prejšnji dve vrstici v vsaki particiji.
Zaključek
V tej vadnici smo se naučili delati s funkcijo lag(), da pridobimo prejšnji element iz trenutne vrstice.