SQL delsa

Sql Delsa



Funkcija SQL lag() leidžia pasiekti ankstesnę eilutę iš dabartinės eilutės tam tikru poslinkiu. Trumpai tariant, funkcija lag() leidžia pasiekti ankstesnę eilutę iš dabartinės. Nurodę poslinkio reikšmę, galite pasiekti ankstesnes 1, 2, 3 ir tt eilutes iš dabartinės.

Tai priešinga funkcijai lead(), kuri leidžia pasiekti kitas eilutes.







SQL delsa ()

Funkcijos sintaksė yra tokia:



VVG(vertės_raiška, poslinkis [, numatytasis])
PABAIGTA (
[Skirstymas pagal skaidinio_reiškinį]
ORDER BY sort_expression [ASC | DESC]
);

Toliau pateikiami palaikomi argumentai:



  • vertės_raiška – Nurodo ankstesnės eilutės grąžinimo vertę. Išraiška turi būti įvertinta iki vienos reikšmės.
  • kompensuoti – Nurodoma, kiek eilučių atgal nuo dabartinės eilutės reikia pasiekti.
  • numatytas – Ji nustato numatytąją reikšmę, jei poslinkis nepatenka į skaidinio sritį. Pagal numatytuosius nustatymus reikšmė nustatyta į NULL.
  • Skirstymas pagal – Nurodoma, kaip suskirstyti duomenis.
  • Rūšiuoti pagal – Nustatomas kiekvieno skaidinio eilučių užsakymo formatas.

Duomenų sąrankos pavyzdys

Prieš pasinerdami į funkcijos lag() veikimą, pradėkime nuo pagrindinės lentelės nustatymo demonstravimo tikslais.





CREATE TABLE produktus (
product_id INT PRIMARY KEY AUTO_INCREMENT,
produkto_pavadinimas VARCHAR(255),
kategorija VARCHAR(255),
kaina DECIMAL (10, 2),
kiekis INT,
expiration_date DATE,
brūkšninis kodas BIGINT
);

Įdėti
į
produktai (produkto pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertės („Chef Hat 25cm“,
'kepykla',
24.67,
57,
„2023-09-09“,
2854509564204);

Įdėti
į
produktai (produkto pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertės („Pupelių kiaušiniai – konservuoti“,
'sandėliukas',
17.99,
67,
„2023-09-29“,
1708039594250);

Įdėti
į
produktai (produkto pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertės ('Kava - Kiaušinis Nog Capuccino',
'kepykla',
92,53,
10,
„2023-09-22“,
8704051853058);

Įdėti
į
produktai (produkto pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertės („Kriaušė – dygliuotas“,
'kepykla',
65.29,
48,
„2023-08-23“,
5174927442238);

Įdėti
į
produktai (produkto_pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertybės („Makaronai – angelo plaukai“,
'sandėliukas',
48.38,
59,
„2023-08-05“,
8008123704782);

Įdėti
į
produktai (produkto_pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertybės („Vynas – Prosecco Valdobiaddene“,
'gaminti',
44.18,
3,
„2023-03-13“,
6470981735653);

Įdėti
į
produktai (produkto pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertės („Tešlos pyragas – prancūziškas mini asorti“,
'sandėliukas',
36,73,
52,
„2023-05-29“,
5963886298051);

Įdėti
į
produktai (produkto pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertės („oranžinė – konservuota, mandarinų“,
'gaminti',
65,0,
1,
„2023-04-20“,
6131761721332);

Įdėti
į
produktai (produkto pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertės („Kiauliena – mentė“,
'gaminti',
55.55,
73,
„2023-05-01“,
9343592107125);

Įdėti
į
produktai (produkto pavadinimas,
Kategorija,
kaina,
kiekis,
galiojimo laikas,
brūkšninis kodas)
vertybės („Dc Hikiage Hira Huba“,
'gaminti',
56.29,
53,
„2023-04-14“,
3354910667072);

Kai duomenų kūrimas ir sąranka baigta, aptarkime kelis pavyzdžius.

1 pavyzdys: pagrindinis naudojimas

Tokiu atveju turime prieigą prie „produktų“ lentelės, kurioje yra produkto informacija. Tarkime, kad norime gauti ankstesnį brūkšninį kodą iš dabartinės eilutės.



Funkciją lag() galime naudoti taip:

pasirinkite
produkto pavadinimas,
kaina,
lag (brūkšninis kodas) per (skirstymas pagal kategoriją
Rūšiuoti pagal
kaina didėja) kaip ankstesnis_prekė

produktai p;

Pateiktas kodas skirsto duomenis pagal kategoriją. Tada jis gauna ankstesnį brūkšninį kodą skaidinyje, naudodamas funkciją lag().

Gauta išvestis yra tokia:

2 pavyzdys: Numatytosios reikšmės nustatymas

Jei konkrečiame stulpelyje nėra ankstesnės eilutės (neribota), funkcija nustato reikšmę į NULL, kaip parodyta ankstesniame pavyzdyje.

Norėdami nustatyti numatytąją bet kokios ne aprėpties prieigos reikšmę, galime atlikti šiuos veiksmus:

pasirinkite
produkto pavadinimas,
kaina,
delsa (brūkšninis kodas, 1, 'N/A') virš (skirstymas pagal kategoriją
Rūšiuoti pagal
kaina didėja) kaip ankstesnis_prekė

produktai p;

Nustatome numatytąją reikšmę „N/A“. Tai turėtų pakeisti bet kokią užribinę vertę, kaip parodyta išvestyje:

3 pavyzdys: pasirinktinė poslinkio vertė

Tarkime, kad norite pasiekti dvi ankstesnes eilutes iš dabartinės eilutės. Tai galime padaryti nustatydami poslinkio reikšmę į 2.

Užklausos pavyzdys parodytas toliau:

pasirinkite
produkto pavadinimas,
kaina,
delsa (brūkšninis kodas, 2, 'N/A') virš (skirstymas pagal kategoriją
Rūšiuoti pagal
kaina didėja) kaip ankstesnis_prekė

produktai p;

Išvestis:

Ši užklausa grąžina ankstesnes dvi eilutes kiekviename skaidinyje.

Išvada

Šioje pamokoje sužinojome, kaip dirbti su funkcija lag() norint gauti ankstesnį elementą iš dabartinės eilutės.