SQL lag()-funktion avulla voit käyttää edellistä riviä nykyiseltä riviltä tietyllä siirrolla. Lyhyesti sanottuna lag()-funktio mahdollistaa pääsyn edelliselle riville nykyisestä rivistä. Määrittämällä offset-arvon pääset nykyisestä rivistä edellisiin 1, 2, 3 jne. riviin.
Se on vastakohta lead()-funktiolle, jonka avulla voit käyttää seuraavia rivejä.
SQL Lag()
Funktioiden syntaksi on seuraava:
LAG(arvon_lauseke, offset [, oletus])
OVER (
[OSIO OSIO-lausekkeen mukaan]
ORDER BY sort_expression [ASC | DESC]
);
Seuraavat ovat tuetut argumentit:
- arvo_lauseke – Se määrittää edellisen rivin palautusarvon. Lausekkeen on arvioitava yksi arvo.
- offset – Se määrittää, kuinka monta riviä taaksepäin nykyisestä rivistä pääsee käsiksi.
- oletuksena – Se asettaa oletusarvon, jos siirtymä ei kuulu osion piiriin. Oletuksena arvo on NULL.
- Osio tekijä – Se määrittää, kuinka tiedot osioidaan.
- Tilaa mukaan – Se määrittää kunkin osion rivien järjestysmuodon.
Esimerkkitietojen määritys
Ennen kuin sukeltaamme lag()-funktion toimintaan, aloitetaan perustamalla perustaulukko esittelytarkoituksiin.
CREATE TABLE tuotteet (
product_id INT PRIMARY KEY AUTO_INCREMENT,
tuotteen_nimi VARCHAR(255),
luokka VARCHAR(255),
hinta DECIMAL(10, 2),
määrä INT,
expiration_date DATE,
viivakoodi BIGINT
);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('Chef Hat 25cm',
'leipomo',
24.67,
57,
'2023-09-09',
2854509564204);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('viiriäisten munat - purkitettu',
'ruokakomero',
17.99,
67,
'2023-09-29',
1708039594250);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('Kahvi - Egg Nog Capuccino',
'leipomo',
92,53,
10,
'2023-09-22',
8704051853058);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('Pear - Prickly',
'leipomo',
65,29,
48,
'2023-08-23',
5174927442238);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('Pasta - Angel Hair',
'ruokakomero',
48,38,
59,
'2023-08-05',
8008123704782);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('Viini - Prosecco Valdobiaddene',
'tuottaa',
44.18,
3,
'2023-03-13',
6470981735653);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('Leivonnaiset - ranskalainen minivalikoima',
'ruokakomero',
36,73,
52,
'2023-05-29',
5963886298051);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('oranssi - purkitettu, mandariini',
'tuottaa',
65,0,
1,
'2023-04-20',
6131761721332);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('Sianliha - lapa',
'tuottaa',
55.55,
73,
'2023-05-01',
9343592107125);
lisää
sisään
tuotteet (tuotteen_nimi,
kategoria,
hinta,
määrä,
viimeinen käyttöpäivä,
viivakoodi)
arvot ('Dc Hikiage Hira Huba',
'tuottaa',
56.29,
53,
'2023-04-14',
3354910667072);
Kun tietojen luominen ja asetukset on tehty, siirrytään käsittelemään muutamia esimerkkejä.
Esimerkki 1: Peruskäyttö
Tässä tapauksessa meillä on pääsy 'tuotteet' -taulukkoon, joka sisältää tuotetiedot. Oletetaan, että haluamme saada edellisen viivakoodin nykyiseltä riviltä.
Voimme käyttää lag()-funktiota seuraavasti:
valitsetuotteen nimi,
hinta,
viive (viivakoodi) yli (osio luokan mukaan
tilata mennessä
hinta asc) kuten edellinen_tuote
alkaen
tuotteet p;
Annettu koodi osittaa tiedot luokan perusteella. Sitten se hakee osion edellisen viivakoodin käyttämällä lag()-funktiota.
Tuloksena oleva tulos on seuraava:
Esimerkki 2: Oletusarvon asettaminen
Jos tietyssä sarakkeessa ei ole edellistä riviä (rajoituksen ulkopuolella), funktio asettaa arvoksi NULL, kuten edellisessä esimerkissä on esitetty.
Voit määrittää oletusarvon kaikelle soveltamisalan ulkopuoliselle käytölle seuraavasti:
valitsetuotteen nimi,
hinta,
viive (viivakoodi, 1, 'N/A') yli (osio luokan mukaan
tilata mennessä
hinta asc) kuten edellinen_tuote
alkaen
tuotteet p;
Asetamme oletusarvoksi 'N/A'. Tämän pitäisi korvata kaikki ulkopuoliset arvot tulosteen mukaisesti:
Esimerkki 3: Mukautettu offset-arvo
Oletetaan, että haluat käyttää kahta edellistä riviä nykyiseltä riviltä. Voimme tehdä sen asettamalla offset-arvoksi 2.
Esimerkki kyselystä on kuvattu seuraavassa:
valitsetuotteen nimi,
hinta,
viive (viivakoodi, 2, 'N/A') yli (osio luokan mukaan
tilata mennessä
hinta asc) kuten edellinen_tuote
alkaen
tuotteet p;
Lähtö:
Tämä kysely palauttaa kunkin osion kaksi edellistä riviä.
Johtopäätös
Tässä opetusohjelmassa opimme työskentelemään lag()-funktion kanssa saadaksesi edellisen kohteen nykyiseltä riviltä.