SQL Lag

Sql Lag



Funkce SQL lag() umožňuje přístup k předchozímu řádku z aktuálního řádku s určitým posunem. Stručně řečeno, funkce lag() umožňuje přístup k předchozímu řádku z aktuálního. Zadáním hodnoty posunu získáte přístup k předchozím 1, 2, 3 atd. řádkům z aktuálního řádku.

Je opakem funkce lead(), která umožňuje přístup k dalším řádkům.







SQL Lag()

Syntaxe funkce je následující:



LAG(výraz_hodnoty; posun [, výchozí])
PŘES (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
);

Níže jsou uvedeny podporované argumenty:



  • hodnota_výraz – Určuje návratovou hodnotu předchozího řádku. Výraz se musí vyhodnotit jako jediná hodnota.
  • offset – Určuje, kolik řádků zpět od aktuálního řádku má být přístup.
  • výchozí – Nastaví výchozí hodnotu, pokud je posun mimo rozsah logické části. Ve výchozím nastavení je hodnota nastavena na NULL.
  • Rozdělit podle – Určuje, jak rozdělit data.
  • Seřadit podle – Nastavuje formát pořadí pro řádky v každém oddílu.

Ukázkové nastavení dat

Než se ponoříme do fungování funkce lag(), začněme nastavením základní tabulky pro demonstrační účely.





CREATE TABLE produkty (
product_id INT PRIMARY KEY AUTO_INCREMENT,
název_produktu VARCHAR(255),
kategorie VARCHAR(255),
cena DECIMAL(10, 2),
množství INT,
expiration_date DATE,
čárový kód VELKÝ
);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ('Chef Hat 25cm',
'pekařství',
24,67,
57,
'2023-09-09',
2854509564204);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty („křepelčí vejce – konzerva“,
'spíž',
17,99,
67,
'2023-09-29',
1708039594250);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ('Káva – vaječný likér capuccino',
'pekařství',
92,53,
10,
'2023-09-22',
8704051853058);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ('Hruška – pichlavý',
'pekařství',
65,29,
48,
'2023-08-23',
5174927442238);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ('Těstoviny - Andělské vlasy',
'spíž',
48,38,
59,
'2023-08-05',
8008123704782);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty („Víno – Prosecco Valdobiaddene“,
'vyrobit',
44,18,
3,
'2023-03-13',
6470981735653);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ('Pečivo – French Mini Assorted',
'spíž',
36,73,
52,
'2023-05-29',
5963886298051);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty („Pomeranč – konzerva, mandarinka“,
'vyrobit',
65,0,
1,
'2023-04-20',
6131761721332);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty („Vepřové maso – plec“,
'vyrobit',
55,55,
73,
'2023-05-01',
9343592107125);

vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty („Dc Hikiage Hira Huba“,
'vyrobit',
56,29,
53,
'2023-04-14',
3354910667072);

Když je vytvoření a nastavení dat dokončeno, pojďme si probrat několik příkladů.

Příklad 1: Základní použití

V tomto případě máme přístup k tabulce „produktů“, která obsahuje informace o produktu. Předpokládejme, že chceme získat předchozí čárový kód z aktuálního řádku.



Funkci lag() můžeme použít následovně:

vybrat
jméno výrobku,
cena,
zpoždění (čárový kód) přes (oddíl podle kategorie
seřadit podle
cena vzestupně) jako předchozí_položka
z
produkty p;

Daný kód rozděluje data na základě kategorie. Poté načte předchozí čárový kód v oddílu pomocí funkce lag().

Výsledný výstup je následující:

Příklad 2: Nastavení výchozí hodnoty

Pokud v určitém sloupci není žádný předchozí řádek (mimo rámec), funkce nastaví hodnotu na NULL, jak je znázorněno v předchozím příkladu.

Chcete-li nastavit výchozí hodnotu pro jakýkoli přístup mimo rozsah, můžeme provést následující:

vybrat
jméno výrobku,
cena,
zpoždění (čárový kód, 1, 'N/A') přes (oddíl podle kategorie
seřadit podle
cena vzestupně) jako předchozí_položka
z
produkty p;

Výchozí hodnotu nastavíme na „N/A“. To by mělo nahradit jakoukoli hodnotu mimo rámec, jak je uvedeno ve výstupu:

Příklad 3: Hodnota vlastního offsetu

Předpokládejme, že chcete získat přístup k předchozím dvěma řádkům z aktuálního řádku. Můžeme to udělat nastavením hodnoty offsetu na 2.

Příklad dotazu je ilustrován následovně:

vybrat
jméno výrobku,
cena,
zpoždění (čárový kód, 2, 'N/A') přes (oddíl podle kategorie
seřadit podle
cena vzestupně) jako předchozí_položka
z
produkty p;

Výstup:

Tento dotaz vrátí předchozí dva řádky v každém oddílu.

Závěr

V tomto tutoriálu jsme se naučili pracovat s funkcí lag(), abychom získali předchozí položku z aktuálního řádku.