logo

Funkce SQL LAG().

Funkce SQL LAG(). je funkce okna, která poskytuje přístup k řádku se zadaným fyzickým posunem, který je před aktuálním řádkem .

Funkce LAG v SQL Server je zvyklý porovnat hodnoty aktuálního řádku s hodnotami z předchozího řádku.



Syntax

The Syntaxe funkce LAG je:

.LAG (skalární_výraz [, offset [, výchozí ]]) PŘES ( [ partition_by_clause ] order_by_clause )

Kde :



  • skalární_výraz – Hodnota, která má být vrácena na základě zadaného posunu.
  • offset – Počet řádků zpět od aktuálního řádku, ze kterých se má získat hodnota. Pokud není zadáno, výchozí je 1.
  • výchozí – default je hodnota, která má být vrácena, pokud offset přesahuje rozsah oddílu. Pokud není zadána výchozí hodnota, vrátí se NULL.
  • partition_by_clause: Nepovinná klauzule, která rozděluje sadu výsledků na oddíly. Funkce LAG() se aplikuje na každý oddíl samostatně.
  • order_by_cluuse: Pořadí řádků v každém oddílu. Toto je povinné a musí být specifikováno.

Příklad funkce SQL LAG().

Podívejme se na některé příklady funkce SQL LAG a pochopíme, jak používat funkci LAG na serveru SQL Server.

Příklad 1

  SELECT   Organisation, [Year], Revenue,   LAG   (Revenue, 1, 0)    OVER   (  PARTITION BY   Organisation   ORDER BY   [Year])   AS   PrevYearRevenue    FROM   Org    ORDER BY   Organisation, [Year];>

Výstup:

Organizace Rok Příjmy Výnosy za předchozí rok
Zprávy ABCD 2013 440 000 0
Zprávy ABCD 2014 480 000 440 000
Zprávy ABCD 2015 490 000 480 000
Zprávy ABCD 2016 500 000 490 000
Zprávy ABCD 2017 520 000 500 000
Zprávy ABCD 2018 525 000 520 000
Zprávy ABCD 2019 540 000 525 000
Zprávy ABCD 2020 550 000 540 000
Zprávy Z 2016 720 000 0
Zprávy Z 2017 750 000 720 000
Zprávy Z 2018 780 000 750 000
Zprávy Z 2019 880 000 780 000
Zprávy Z 2020 910 000 880 000

Ve výše uvedeném příkladu máme 2 televizní zpravodajský kanál, jehož aktuální a předchozí rok jsou uvedeny na stejném řádku pomocí funkce LAG(). Jak vidíte, úplně první záznam pro každý z kanálů televizních zpráv nemá příjmy z předchozího roku, takže zobrazuje výchozí hodnotu 0. Tato funkce může být velmi užitečná při získávání dat pro zprávy BI, když chcete porovnávat hodnoty v po sobě jdoucích obdobích, např. Meziroční nebo čtvrtletní nebo denní srovnání.



Příklad 2

  SELECT   Z.*, (Z.Revenue - z.PrevYearRevenue) as YearonYearGrowth   FROM   (SELECT Organisation, [Year], Revenue,    LAG   (Revenue, 1)     OVER   (  PARTITION BY   Organisation   ORDER BY   [Year] )   AS   PrevYearRevenue     FROM   Org) Z   ORDER BY   Organisation, [Year];>

Výstup:

Organizace Rok Příjmy Výnosy za předchozí rok YearOnYearRůst
Zprávy ABCD 2013 440 000 NULA NULA
Zprávy ABCD 2014 480 000 440 000 40 000
Zprávy ABCD 2015 490 000 480 000 10 000
Zprávy ABCD 2016 500 000 490 000 10 000
Zprávy ABCD 2017 520 000 500 000 20 000
Zprávy ABCD 2018 525 000 520 000 5000
Zprávy ABCD 2019 540 000 525 000 15 000
Zprávy ABCD 2020 550 000 540 000 10 000
Zprávy Z 2016 720 000 NULA NULA
Zprávy Z 2017 750 000 720 000 30 000
Zprávy Z 2018 780 000 750 000 30 000
Zprávy Z 2019 880 000 780 000 100 000
Zprávy Z 2020 910 000 880 000 30 000

Ve výše uvedeném příkladu můžeme podobně vypočítat meziroční růst pro televizní zpravodajský kanál. Jedna věc, které je třeba si v tomto příkladu všimnout, je, že jsme do LAG() nedodali žádný výchozí parametr, a proto funkce LAG() vrací NULL v případě, že neexistují žádné předchozí hodnoty. Funkci LAG() lze implementovat na úrovni databáze a řešení BI Reporting, jako je Power BI a Tableau, se mohou vyhnout použití těžkopádných opatření na vrstvě sestav.

Důležité body o funkci SQL LAG().

  • Funkce SQL LAG() je funkce okna, která uživatelům umožňuje přístup k datům z dřívějších řádků v datové množině.
  • Umožňuje uživatelům porovnávat aktuální hodnoty řádků s hodnotami z předchozích řádků, zejména s těmi, které se týkají času nebo konkrétních sloupců.
  • Funkce LAG() je cenná pro analýzu změn v čase, jako jsou data akciového trhu, denní trendy a změny ve více sloupcích.