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:
vyberteMeno 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é:
vyberteMeno 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:
vyberteMeno 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.