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.