Zamik SQL

Zamik Sql



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:

izberite
ime 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:

izberite
ime 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:

izberite
ime 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.