SQL kašnjenje

Sql Kasnjenje



Funkcija SQL lag() omogućuje vam pristup prethodnom retku iz trenutnog retka na određenom pomaku. Ukratko, funkcija lag() omogućuje vam pristup prethodnom retku iz trenutnog. Određivanjem vrijednosti pomaka, možete pristupiti prethodnim 1, 2, 3, itd. recima iz trenutnog.

To je suprotno od funkcije lead() koja vam omogućuje pristup sljedećim redovima.







SQL Lag()

Sintaksa funkcije je sljedeća:



LAG(izraz_vrijednosti, pomak [, zadano])
PREKO (
[PARTICIJA PO particionom_izrazu]
ORDER BY sort_expression [ASC | DESC]
);

Sljedeći su podržani argumenti:



  • vrijednost_izraza – Određuje povratnu vrijednost prethodnog reda. Izraz mora dati jednu vrijednost.
  • pomaknuti – Određuje koliko redaka unatrag od trenutnog retka treba pristupiti.
  • zadano – Postavlja zadanu vrijednost ako je pomak izvan opsega particije. Prema zadanim postavkama, vrijednost je postavljena na NULL.
  • Podjela po – Određuje kako podijeliti podatke.
  • Naručite po – Postavlja format redoslijeda za retke u svakoj particiji.

Postavljanje uzorka podataka

Prije nego što zaronimo u rad funkcije lag(), započnimo s postavljanjem osnovne tablice u svrhu demonstracije.





CREATE TABLE proizvodi (
product_id INT PRIMARY KEY AUTO_INCREMENT,
naziv_proizvoda VARCHAR(255),
kategorija VARCHAR(255),
cijena DECIMAL(10, 2),
količina INT,
datum_istjecanja DATE,
crtični kod BIGINT
);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Kuharska kapa 25 cm',
'pekara',
24.67,
57,
'2023-09-09',
2854509564204);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Prepeličja jaja - konzervirana',
'ostava',
17.99,
67,
'2023-09-29',
1708039594250);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Kava - Egg Nog Capuccino',
'pekara',
92.53,
10,
'2023-09-22',
8704051853058);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Kruška - bodljikava',
'pekara',
65.29,
48,
'2023-08-23',
5174927442238);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Tjestenina - anđeoska kosa',
'ostava',
48.38,
59,
'2023-08-05',
8008123704782);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Vino - Prosecco Valdobiaddene',
'proizvesti',
44.18,
3,
'2023-03-13',
6470981735653);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Pecivo - francuski mini izbor',
'ostava',
36.73,
52,
'2023-05-29',
5963886298051);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Naranča - konzervirana, mandarina',
'proizvesti',
65,0,
1,
'20.4.2023',
6131761721332);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Svinjetina - plećka',
'proizvesti',
55.55,
73,
'2023-05-01',
9343592107125);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ('Dc Hikiage Hira Huba',
'proizvesti',
56.29,
53,
'2023-04-14',
3354910667072);

Nakon što je izrada i postavljanje podataka završeno, nastavimo s raspravom o nekoliko primjera.

Primjer 1: Osnovna upotreba

U ovom slučaju imamo pristup tablici 'proizvodi' koja sadrži podatke o proizvodu. Pretpostavimo da želimo dobiti prethodni crtični kod iz trenutnog retka.



Funkciju lag() možemo koristiti na sljedeći način:

Izaberi
ime proizvoda,
cijena,
kašnjenje (crtični kod) preko (podjela po kategoriji
naručiti po
cijena uzlazno) kao prethodna_stavka
iz
proizvodi p;

Zadani kod dijeli podatke na temelju kategorije. Zatim dohvaća prethodni crtični kod u particiji pomoću funkcije lag().

Rezultirajući izlaz je sljedeći:

Primjer 2: Postavljanje zadane vrijednosti

Ako u određenom stupcu nema prethodnog retka (izvan granice), funkcija postavlja vrijednost na NULL kao što je prikazano u prethodnom primjeru.

Da bismo postavili zadanu vrijednost za bilo koji pristup izvan opsega, možemo učiniti sljedeće:

Izaberi
ime proizvoda,
cijena,
lag(barcode, 1, 'N/A') over (particija po kategoriji
naručiti po
cijena uzlazno) kao prethodna_stavka
iz
proizvodi p;

Postavili smo zadanu vrijednost na 'N/A'. Ovo bi trebalo zamijeniti sve izvangranične vrijednosti kao što je prikazano u izlazu:

Primjer 3: Prilagođena vrijednost pomaka

Pretpostavimo da želite pristupiti prethodna dva retka iz trenutnog retka. To možemo učiniti postavljanjem vrijednosti pomaka na 2.

Primjer upita ilustriran je u nastavku:

Izaberi
ime proizvoda,
cijena,
lag(barcode, 2, 'N/A') over (particija po kategoriji
naručiti po
cijena uzlazno) kao prethodna_stavka
iz
proizvodi p;

Izlaz:

Ovaj upit vraća prethodna dva retka u svakoj particiji.

Zaključak

U ovom vodiču naučili smo kako raditi s funkcijom lag() da bismo dobili prethodnu stavku iz trenutnog retka.