SQL Lag

Sql Lag



Funkcia SQL lag() vám umožňuje prístup k predchádzajúcemu riadku z aktuálneho riadka s určitým posunom. Stručne povedané, funkcia lag() vám umožňuje prístup k predchádzajúcemu riadku z aktuálneho. Zadaním hodnoty posunu získate prístup k predchádzajúcim 1, 2, 3 atď. riadkom z aktuálneho.

Je to opak funkcie lead(), ktorá vám umožňuje prístup k nasledujúcim riadkom.







SQL Lag()

Syntax funkcie je nasledovná:



LAG(výraz_hodnoty; posun [, predvolená hodnota])
NAD (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
);

Nasledujú podporované argumenty:



  • hodnota_výraz – Určuje návratovú hodnotu predchádzajúceho riadku. Výraz sa musí vyhodnotiť ako jedna hodnota.
  • offset – Určuje, o koľko riadkov dozadu od aktuálneho riadka sa má pristupovať.
  • predvolená – Nastaví predvolenú hodnotu, ak je posun mimo rozsahu oddielu. Štandardne je hodnota nastavená na NULL.
  • Rozdelenie podľa – Špecifikuje, ako rozdeliť údaje.
  • Zoradiť podľa – Nastavuje formát poradia pre riadky v každom oddiele.

Nastavenie vzorových údajov

Predtým, ako sa ponoríme do fungovania funkcie lag(), začnime nastavením základnej tabuľky na demonštračné účely.





Produkty CREATE TABLE (
product_id INT PRIMARY KEY AUTO_INCREMENT,
názov_produktu VARCHAR(255),
kategória VARCHAR(255),
cena DECIMAL(10, 2),
množstvo INT,
expiration_date DATE,
čiarový kód BIGINT
);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty („Chef Klobúk 25 cm“,
'pekáreň',
24,67,
57,
'2023-09-09',
2854509564204);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty („prepeličie vajcia – konzervované“,
'špajza',
17,99,
67,
'2023-09-29',
1708039594250);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty („Káva – vaječný likér capuccino“,
'pekáreň',
92,53,
10,
'2023-09-22',
8704051853058);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty ('Hruška - Ostnatý',
'pekáreň',
65,29,
48,
'2023-08-23',
5174927442238);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty („cestoviny – anjelské vlasy“,
'špajza',
48,38,
59,
'2023-08-05',
8008123704782);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty („Víno – Prosecco Valdobiaddene“,
'produkovať',
44,18,
3,
'2023-03-13',
6470981735653);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty ('Pečivo – francúzske mini rôzne',
'špajza',
36,73,
52,
'2023-05-29',
5963886298051);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty („Pomaranč – konzerva, mandarínka“,
'produkovať',
65,0,
1,
'2023-04-20',
6131761721332);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty („bravčové mäso – plec“,
'produkovať',
55,55,
73,
'2023-05-01',
9343592107125);

vložiť
do
produkty (názov_produktu,
kategória,
cena,
množstvo,
dátum spotreby,
čiarový kód)
hodnoty („Dc Hikiage Hira Huba“,
'produkovať',
56,29,
53,
'2023-04-14',
3354910667072);

Po dokončení vytvárania a nastavenia údajov prejdime na niekoľko príkladov.

Príklad 1: Základné použitie

V tomto prípade máme prístup k tabuľke „produkty“, ktorá obsahuje informácie o produkte. Predpokladajme, že chceme získať predchádzajúci čiarový kód z aktuálneho riadku.



Funkciu lag() môžeme použiť takto:

vyberte
Meno Produktu,
cena,
oneskorenie (čiarový kód) nad (rozdelenie podľa kategórie
zoradiť podľa
cena vzostupne) ako predchádzajúca_položka
od
produkty p;

Daný kód rozdeľuje údaje na základe kategórie. Potom získa predchádzajúci čiarový kód v oddiele pomocou funkcie lag().

Výsledný výstup je nasledovný:

Príklad 2: Nastavenie predvolenej hodnoty

Ak v konkrétnom stĺpci nie je žiadny predchádzajúci riadok (mimo väzby), funkcia nastaví hodnotu na NULL, ako je znázornené v predchádzajúcom príklade.

Ak chcete nastaviť predvolenú hodnotu pre akýkoľvek prístup mimo rozsahu, môžeme urobiť nasledovné:

vyberte
Meno Produktu,
cena,
oneskorenie (čiarový kód, 1, 'N/A') nad (rozdelenie podľa kategórie
zoradiť podľa
cena vzostupne) ako predchádzajúca_položka
od
produkty p;

Predvolenú hodnotu sme nastavili na „N/A“. Toto by malo nahradiť akúkoľvek hodnotu mimo hranice, ako je uvedené vo výstupe:

Príklad 3: Vlastná hodnota odsadenia

Predpokladajme, že chcete získať prístup k predchádzajúcim dvom riadkom z aktuálneho riadku. Môžeme to urobiť nastavením hodnoty offsetu na 2.

Príklad dotazu je ilustrovaný nasledovne:

vyberte
Meno Produktu,
cena,
oneskorenie (čiarový kód, 2, 'N/A') nad (rozdelenie podľa kategórie
zoradiť podľa
cena vzostupne) ako predchádzajúca_položka
od
produkty p;

Výkon:

Tento dotaz vráti predchádzajúce dva riadky v každom oddiele.

Záver

V tomto návode sme sa naučili pracovať s funkciou lag() na získanie predchádzajúcej položky z aktuálneho riadku.