SQL kavēšanās

Sql Kavesanas



Funkcija SQL lag() ļauj piekļūt iepriekšējai rindai no pašreizējās rindas ar noteiktu nobīdi. Īsāk sakot, funkcija lag() ļauj piekļūt iepriekšējai rindai no pašreizējās. Norādot nobīdes vērtību, jūs varat piekļūt iepriekšējām 1, 2, 3 utt. rindām no pašreizējās.

Tas ir pretējs funkcijai lead(), kas ļauj piekļūt nākamajām rindām.







SQL Lag()

Funkcijas sintakse ir šāda:



LAG(vērtības_izteiksme, nobīde [, noklusējuma])
OVER (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
);

Atbalstītie argumenti ir šādi:



  • vērtības_izteiksme – Tas norāda iepriekšējās rindas atgriešanas vērtību. Izteiksmei ir jānovērtē viena vērtība.
  • kompensēt – Tas norāda, cik rindu atpakaļ no pašreizējās rindas ir jāpiekļūst.
  • noklusējuma – Tas nosaka noklusējuma vērtību, ja nobīde ir ārpus nodalījuma darbības jomas. Pēc noklusējuma vērtība ir iestatīta uz NULL.
  • Sadalījums pēc – Tas norāda, kā sadalīt datus.
  • Sakārtot pēc – Tas nosaka katra nodalījuma rindu secības formātu.

Datu iestatīšanas paraugs

Pirms iedziļināmies funkcijas lag() darbībā, sāksim ar pamata tabulas iestatīšanu demonstrācijas nolūkos.





CREATE TABLE produkti (
product_id INT PRIMARY KEY AUTO_INCREMENT,
produkta_nosaukums VARCHAR(255),
kategorija VARCHAR(255),
cena DECIMAL(10, 2),
daudzums INT,
expiration_date DATE,
svītrkods BIGINT
);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('Šefpavāra cepure 25 cm',
'maizes ceptuve',
24.67,
57,
“2023-09-09”,
2854509564204);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('Paipalu olas — konservētas',
'pieliekamais',
17.99,
67,
“2023-09-29”,
1708039594250);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības (“Kafija – olu nog kapučīno”,
'maizes ceptuve',
92,53,
10,
“2023-09-22”,
8704051853058);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('bumbieris - dzeloņplūsmas',
'maizes ceptuve',
65,29,
48,
“2023-08-23”,
5174927442238);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('Makaroni - eņģeļu mati',
'pieliekamais',
48,38,
59,
“2023-08-05”,
8008123704782);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('Vīns - Prosecco Valdobiaddene',
'ražot',
44.18,
3,
“2023-03-13”,
6470981735653);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('Konditorejas izstrādājumi - franču mini asorti',
'pieliekamais',
36,73,
52,
“2023-05-29”,
5963886298051);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('oranžs - konservēts, mandarīns',
'ražot',
65,0,
1,
“2023-04-20”,
6131761721332);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('Cūkgaļa - plecs',
'ražot',
55,55,
73,
“2023-05-01”,
9343592107125);

ievietot
iekšā
produkti (produkta_nosaukums,
kategorija,
cena,
daudzums,
derīguma termiņš,
svītrkods)
vērtības ('Dc Hikiage Hira Huba',
'ražot',
56.29,
53,
“2023-04-14”,
3354910667072);

Kad datu izveide un iestatīšana ir pabeigta, turpināsim apspriest dažus piemērus.

1. piemērs: pamata lietojums

Šajā gadījumā mums ir pieejama “produktu” tabula, kurā ir informācija par produktu. Pieņemsim, ka mēs vēlamies iegūt iepriekšējo svītrkodu no pašreizējās rindas.



Mēs varam izmantot funkciju lag () šādi:

izvēlieties
produkta nosaukums,
cena,
lag (svītrkods) pār (sadaļa pēc kategorijas
sakārtot pēc
cena asc) kā iepriekšējā_vienums
no
produkti p;

Dotais kods sadala datus, pamatojoties uz kategoriju. Pēc tam tas ienes nodalījumā iepriekšējo svītrkodu, izmantojot funkciju lag ().

Rezultātā iegūtais rezultāts ir šāds:

2. piemērs: Noklusējuma vērtības iestatīšana

Ja konkrētā kolonnā nav iepriekšējās rindas (ārpus ierobežojuma), funkcija iestata vērtību uz NULL, kā parādīts iepriekšējā piemērā.

Lai iestatītu noklusējuma vērtību jebkurai ārpus darbības jomas piekļuvei, mēs varam rīkoties šādi:

izvēlieties
produkta nosaukums,
cena,
lag (svītrkods, 1, 'N/A') over (sadalījums pēc kategorijas
sakārtot pēc
cena asc) kā iepriekšējā_vienums
no
produkti p;

Mēs iestatījām noklusējuma vērtību uz “N/A”. Tam ir jāaizstāj jebkura ārpuses vērtība, kā parādīts izvadē:

3. piemērs. Pielāgota nobīdes vērtība

Pieņemsim, ka vēlaties piekļūt iepriekšējām divām rindām no pašreizējās rindas. Mēs to varam izdarīt, iestatot nobīdes vērtību uz 2.

Vaicājuma piemērs ir parādīts tālāk norādītajā attēlā.

izvēlieties
produkta nosaukums,
cena,
lag (svītrkods, 2, 'N/A') over (sadalījums pēc kategorijas
sakārtot pēc
cena asc) kā iepriekšējā_vienums
no
produkti p;

Izvade:

Šis vaicājums atgriež iepriekšējās divas rindas katrā nodalījumā.

Secinājums

Šajā apmācībā mēs uzzinājām, kā strādāt ar funkciju lag(), lai iegūtu iepriekšējo vienumu no pašreizējās rindas.