SQL LAG()-funktio on ikkunatoiminto, joka tarjoaa pääsyn riville määritetyllä fyysisellä siirtymällä, joka tulee ennen nykyistä riviä .
LAG-toiminto SQL Serverissä on tapana vertaa nykyisen rivin arvoja edellisen rivin arvoihin.
Syntaksi
The LAG-funktion syntaksi On:
.LAG (skalaarilauseke [, offset [, oletus]]) YLI ( [ osio_lauseittain ] järjestys lauseelta )
Missä :
- skalaarinen_lauseke – Määritetyn siirtymän perusteella palautettava arvo.
- offset - Nykyiseltä riviltä taaksepäin olevien rivien määrä, josta arvo saadaan. Jos sitä ei ole määritetty, oletusarvo on 1.
- oletusarvo - oletusarvo on palautettava arvo, jos offset ylittää osion soveltamisalan. Jos oletusarvoa ei ole määritetty, palautetaan NULL.
- partition_by_lause: Valinnainen lauseke, joka jakaa tulosjoukon osioihin. LAG()-funktiota sovelletaan jokaiseen osioon erikseen.
- order_by_lause: Kunkin osion rivien järjestys. Tämä on pakollista ja se on määritettävä.
SQL LAG()-funktioesimerkki
Katsotaanpa joitain esimerkkejä SQL LAG -toiminnosta ja ymmärrämme kuinka LAG-toimintoa käytetään SQL Serverissä.
Esimerkki 1
SELECT Organisation, [Year], Revenue, LAG (Revenue, 1, 0) OVER ( PARTITION BY Organisation ORDER BY [Year]) AS PrevYearRevenue FROM Org ORDER BY Organisation, [Year];>
Lähtö:
| Organisaatio | vuosi | Tulot | Edellinen vuositulo |
|---|---|---|---|
| ABCD uutiset | 2013 | 440 000 | 0 |
| ABCD uutiset | 2014 | 480 000 | 440 000 |
| ABCD uutiset | 2015 | 490 000 | 480 000 |
| ABCD uutiset | 2016 | 500 000 | 490 000 |
| ABCD uutiset | 2017 | 520 000 | 500 000 |
| ABCD uutiset | 2018 | 525 000 | 520 000 |
| ABCD uutiset | 2019 | 540 000 | 525 000 |
| ABCD uutiset | 2020 | 550 000 | 540 000 |
| Z Uutiset | 2016 | 720 000 | 0 |
| Z Uutiset | 2017 | 750 000 | 720 000 |
| Z Uutiset | 2018 | 780 000 | 750 000 |
| Z Uutiset | 2019 | 880 000 | 780 000 |
| Z Uutiset | 2020 | 910 000 | 880 000 |
Yllä olevassa esimerkissä meillä on 2 TV-uutiskanavaa, joiden nykyinen ja edellisen vuoden tulot esitetään samalla rivillä käyttämällä LAG()-toimintoa. Kuten näette, jokaisen TV-uutiskanavan ensimmäisellä tietueella ei ole edellisen vuoden tuloja, joten se näyttää oletusarvon 0. Tämä toiminto voi olla erittäin hyödyllinen tietojen tuottamisessa BI-raportteihin, kun haluat vertailla arvoja peräkkäisinä jaksoina, esim. Vertailu vuodesta toiseen tai neljännesvuosittaiseen tai päivittäiseen vertailuun.
Esimerkki 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];>
Lähtö:
| Organisaatio | vuosi | Tulot | Edellinen vuositulo | Vuotta vuodessa Kasvu |
|---|---|---|---|---|
| ABCD uutiset | 2013 | 440 000 | TYHJÄ | TYHJÄ |
| ABCD uutiset | 2014 | 480 000 | 440 000 | 40 000 |
| ABCD uutiset | 2015 | 490 000 | 480 000 | 10 000 |
| ABCD uutiset | 2016 | 500 000 | 490 000 | 10 000 |
| ABCD uutiset | 2017 | 520 000 | 500 000 | 20 000 |
| ABCD uutiset | 2018 | 525 000 | 520 000 | 5000 |
| ABCD uutiset | 2019 | 540 000 | 525 000 | 15 000 |
| ABCD uutiset | 2020 | 550 000 | 540 000 | 10 000 |
| Z Uutiset | 2016 | 720 000 | TYHJÄ | TYHJÄ |
| Z Uutiset | 2017 | 750 000 | 720 000 | 30 000 |
| Z Uutiset | 2018 | 780 000 | 750 000 | 30 000 |
| Z Uutiset | 2019 | 880 000 | 780 000 | 100 000 |
| Z Uutiset | 2020 | 910 000 | 880 000 | 30 000 |
Yllä olevassa esimerkissä voimme samalla tavalla laskea TV-uutiskanavan vuosittaisen kasvun. Tässä esimerkissä on myös huomioitava seikka, että emme ole toimittaneet mitään oletusparametria LAG()-funktiolle, joten LAG()-funktio palauttaa NULL-arvon, jos aikaisempia arvoja ei ole. LAG()-funktio voidaan toteuttaa tietokantatasolla, ja BI-raportointiratkaisut, kuten Power BI ja Tableau, voivat välttää raskaiden toimenpiteiden käyttämisen raportointikerroksessa.
Tärkeitä kohtia SQL LAG() -funktiosta
- SQL LAG()-funktio on ikkunafunktio, jonka avulla käyttäjät voivat käyttää tietojoukon aiempien rivien tietoja.
- Sen avulla käyttäjät voivat verrata nykyisten rivien arvoja aiempien rivien arvoihin, erityisesti niihin, jotka liittyvät aikaan tai tiettyihin sarakkeisiin.
- LAG()-funktio on arvokas analysoitaessa ajan kuluessa tapahtuneita muutoksia, kuten osakemarkkinatietoja, päivittäisiä trendejä ja useiden sarakkeiden muutoksia.