SQL Lag

Sql Lag



Az SQL lag() függvény lehetővé teszi az előző sor elérését az aktuális sorból egy adott eltolás mellett. Röviden: a lag() függvény lehetővé teszi az előző sor elérését az aktuális sorból. Az eltolás értékének megadásával az aktuális sorból érheti el az előző 1, 2, 3 stb. sorokat.

Ellentéte a lead() függvénynek, amely lehetővé teszi a következő sorok elérését.







SQL Lag()

A függvény szintaxisa a következő:



LAG(érték_kifejezés, eltolás [, alapértelmezett])
VÉGE (
[PARTÍCIÓ SZERINT partíciókifejezés]
ORDER BY rendezési_kifejezés [ASC | DESC]
);

A támogatott érvek a következők:



  • érték_kifejezés – Megadja az előző sor visszatérési értékét. A kifejezést egyetlen értékre kell kiértékelni.
  • beszámítás – Meghatározza, hogy az aktuális sortól visszafelé hány sort kell elérni.
  • alapértelmezett – Beállítja az alapértelmezett értéket, ha az eltolás kívül esik a partíció hatókörén. Alapértelmezés szerint az érték NULL.
  • Partíció szerint – Meghatározza az adatok particionálásának módját.
  • Rendezés – Az egyes partíciókban beállítja a sorok sorrendjének formátumát.

Minta adatbeállítás

Mielőtt belemerülnénk a lag() függvény működésébe, kezdjük azzal, hogy felállítunk egy alapvető táblázatot bemutató célból.





CREATE TABLE termékek (
product_id INT ELSŐDLEGES KULCS AUTO_INCREMENT,
termék_neve VARCHAR(255),
VARCHAR kategória(255),
ár DECIMAL(10, 2),
mennyiség INT,
expiration_date DATE,
vonalkód BIGINT
);

betét
-ba
termékek (termék_neve,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('Séf kalap 25 cm',
'pékség',
24.67,
57,
'2023-09-09',
2854509564204);

betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('Fürjtojás – Konzerv),
'éléskamra',
17,99,
67,
'2023-09-29',
1708039594250);

betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('Coffee - Egg Nog Capuccino',
'pékség',
92,53,
10,
'2023-09-22',
8704051853058);

betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('Körte - Tüskés',
'pékség',
65,29,
48,
'2023-08-23',
5174927442238);

betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('tészta - angyalhaj',
'éléskamra',
48.38,
59,
'2023-08-05',
8008123704782);

betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('Bor - Prosecco Valdobiaddene',
'termelni',
44.18,
3,
'2023-03-13',
6470981735653);

betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékeket ('Püstök - French Mini Asorted',
'éléskamra',
36,73,
52,
'2023-05-29',
5963886298051);

betét
-ba
termékek (termék_neve,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('narancs - konzerv, mandarin',
'termelni',
65,0,
1,
'2023-04-20',
6131761721332);

betét
-ba
termékek (termék_neve,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('sertés - lapocka',
'termelni',
55,55,
73,
'2023-05-01',
9343592107125);

betét
-ba
termékek (termék_neve,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ('Dc Hikiage Hira Huba',
'termelni',
56.29,
53,
'2023-04-14',
3354910667072);

Az adatok létrehozása és beállítása befejeződött, folytassuk néhány példa megvitatását.

1. példa: Alapvető használat

Ebben az esetben hozzáférünk egy „termékek” táblázathoz, amely tartalmazza a termékinformációkat. Tegyük fel, hogy az előző vonalkódot szeretnénk lekérni az aktuális sorból.



A lag() függvényt a következőképpen használhatjuk:

válassza ki
termék név,
ár,
lag(vonalkód) over (partíció kategória szerint
Rendezés
ár növekvő) mint előző_cikk
tól től
termékek p;

Az adott kód kategória alapján particionálja az adatokat. Ezután a lag() függvény segítségével lekéri a partíció előző vonalkódját.

A kapott kimenet a következő:

2. példa: Az alapértelmezett érték beállítása

Ha egy adott oszlopban nincs előző sor (határon kívül), a függvény az értéket NULL-ra állítja, ahogy az az előző példában is látható.

A hatókörön kívüli hozzáférés alapértelmezett értékének beállításához a következőket tehetjük:

válassza ki
termék név,
ár,
lag (vonalkód, 1, 'N/A') over (partíció kategória szerint
Rendezés
ár növekvő) mint előző_cikk
tól től
termékek p;

Az alapértelmezett értéket „N/A”-ra állítottuk. Ennek le kell cserélnie minden határon kívüli értéket, ahogy az a kimenetben látható:

3. példa: Egyéni eltolási érték

Tegyük fel, hogy az aktuális sorból szeretné elérni az előző két sort. Ezt úgy tehetjük meg, hogy az eltolás értékét 2-re állítjuk.

Egy példa lekérdezést szemléltet a következő:

válassza ki
termék név,
ár,
lag(vonalkód, 2, 'N/A') over (partíció kategória szerint
Rendezés
ár növekvő) mint előző_cikk
tól től
termékek p;

Kimenet:

Ez a lekérdezés az egyes partíciók előző két sorát adja vissza.

Következtetés

Ebben az oktatóanyagban megtanultuk, hogyan kell dolgozni a lag() függvénnyel, hogy az előző elemet lekérjük az aktuális sorból.