Funkcija SQL LAG(). je okenska funkcija, ki omogoča dostop do vrstice pri določenem fizičnem odmiku, ki je pred trenutno vrstico .
Funkcija LAG v strežniku SQL Server je navajen primerja vrednosti trenutne vrstice z vrednostmi iz prejšnje vrstice.
Sintaksa
The Sintaksa funkcije LAG je:
.LAG (skalarni_izraz [, odmik [, privzeto ]]) OVER ( [particija_po_členu] naročilo_po_členu)
Kje :
- skalarni_izraz – Vrednost, ki bo vrnjena na podlagi podanega odmika.
- odmik – Število vrstic nazaj od trenutne vrstice, iz katere je treba pridobiti vrednost. Če ni navedeno, je privzeta vrednost 1.
- privzeto – privzeto vrednost je vrnjena, če odmik presega obseg particije. Če privzeta vrednost ni podana, je vrnjena vrednost NULL.
- particija_po_členu: Izbirna klavzula, ki razdeli niz rezultatov na particije. Funkcija LAG() se uporabi za vsako particijo posebej.
- order_by_clause: Vrstni red vrstic v vsaki particiji. To je obvezno in mora biti določeno.
Primer funkcije SQL LAG().
Oglejmo si nekaj primerov funkcije LAG SQL in razumemo, kako uporabljati funkcijo LAG v strežniku SQL Server.
Primer 1
SELECT Organisation, [Year], Revenue, LAG (Revenue, 1, 0) OVER ( PARTITION BY Organisation ORDER BY [Year]) AS PrevYearRevenue FROM Org ORDER BY Organisation, [Year];>
Izhod:
| Organizacija | leto | Prihodki | PrevYearRevenue |
|---|---|---|---|
| Novice ABCD | 2013 | 440000 | 0 |
| Novice ABCD | 2014 | 480000 | 440000 |
| Novice ABCD | 2015 | 490000 | 480000 |
| Novice ABCD | 2016 | 500000 | 490000 |
| Novice ABCD | 2017 | 520000 | 500000 |
| Novice ABCD | 2018 | 525000 | 520000 |
| Novice ABCD | 2019 | 540000 | 525000 |
| Novice ABCD | 2020 | 550000 | 540000 |
| Z Novice | 2016 | 720000 | 0 |
| Z Novice | 2017 | 750000 | 720000 |
| Z Novice | 2018 | 780000 | 750000 |
| Z Novice | 2019 | 880000 | 780000 |
| Z Novice | 2020 | 910000 | 880000 |
V zgornjem primeru imamo 2 televizijska kanala z novicami, katerih prihodki za tekoče in prejšnje leto so predstavljeni v isti vrstici s funkcijo LAG(). Kot lahko vidite, prvi zapis za vsakega od kanalov TV novic nima prihodkov iz prejšnjega leta, zato prikazuje privzeto vrednost 0. Ta funkcija je lahko zelo uporabna pri pridobivanju podatkov za poročila BI, ko želite primerjati vrednosti v zaporednih obdobjih, npr. Leto za letom ali četrtletje za četrtletjem ali dnevne primerjave.
Primer 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];>
Izhod:
| Organizacija | leto | Prihodki | PrevYearRevenue | YearOnYearGrowth |
|---|---|---|---|---|
| Novice ABCD | 2013 | 440000 | NIČ | NIČ |
| Novice ABCD | 2014 | 480000 | 440000 | 40000 |
| Novice ABCD | 2015 | 490000 | 480000 | 10000 |
| Novice ABCD | 2016 | 500000 | 490000 | 10000 |
| Novice ABCD | 2017 | 520000 | 500000 | 20000 |
| Novice ABCD | 2018 | 525000 | 520000 | 5000 |
| Novice ABCD | 2019 | 540000 | 525000 | 15000 |
| Novice ABCD | 2020 | 550000 | 540000 | 10000 |
| Z Novice | 2016 | 720000 | NIČ | NIČ |
| Z Novice | 2017 | 750000 | 720000 | 30000 |
| Z Novice | 2018 | 780000 | 750000 | 30000 |
| Z Novice | 2019 | 880000 | 780000 | 100000 |
| Z Novice | 2020 | 910000 | 880000 | 30000 |
V zgornjem primeru lahko podobno izračunamo medletno rast za TV News Channel. V tem primeru je treba opozoriti tudi na to, da LAG() nismo posredovali nobenega privzetega parametra, zato funkcija LAG() vrne NULL, če ni prejšnjih vrednosti. Funkcijo LAG() je mogoče implementirati na ravni baze podatkov, rešitve za poročanje BI, kot sta Power BI in Tableau, pa se lahko izognejo uporabi okornih ukrepov na ravni poročanja.
Pomembne točke o funkciji SQL LAG().
- Funkcija SQL LAG() je okenska funkcija, ki uporabnikom omogoča dostop do podatkov iz prejšnjih vrstic v naboru podatkov.
- Uporabnikom omogoča primerjavo trenutnih vrednosti vrstic z vrednostmi iz prejšnjih vrstic, zlasti tistih, ki so povezane s časom ali določenimi stolpci.
- Funkcija LAG() je dragocena za analiziranje sprememb skozi čas, kot so borzni podatki, dnevni trendi in spremembe v več stolpcih.