SQL LAG()-funktionen er en vinduesfunktion, der giver adgang til en række med en specificeret fysisk offset, som kommer før den aktuelle række .
LAG funktion i SQL Server er vant til sammenligne aktuelle rækkeværdier med værdier fra den foregående række.
netværksarkitektur
Syntaks
Det LAG funktions syntaks er:
.LAG (scalar_expression [, offset [, default ]]) OVER ( [ partition_by_clause ] order_by_clause )
Hvor :
- scalar_expression – Den værdi, der skal returneres baseret på den angivne offset.
- offset - Antallet af rækker tilbage fra den aktuelle række, hvorfra der skal opnås en værdi. Hvis ikke angivet, er standarden 1.
- Standard - standard er den værdi, der skal returneres, hvis offset går ud over partitionens omfang. Hvis en standardværdi ikke er angivet, returneres NULL.
- partition_by_clause: En valgfri klausul, der opdeler resultatsættet i partitioner. Funktionen LAG() anvendes på hver partition separat.
- ordre_efter_klausul: Rækkefølgen af rækkerne inden for hver partition. Dette er obligatorisk og skal specificeres.
Eksempel på SQL LAG()-funktion
Lad os se på nogle eksempler på SQL LAG-funktion og forstå, hvordan man bruger LAG-funktion i SQL Server.
Eksempel 1
SELECT Organisation, [Year], Revenue, LAG (Revenue, 1, 0) OVER ( PARTITION BY Organisation ORDER BY [Year]) AS PrevYearRevenue FROM Org ORDER BY Organisation, [Year];>
Produktion:
| Organisation | År | Indtægter | Forrige Års Omsætning |
|---|---|---|---|
| ABCD Nyheder | 2013 | 440000 | 0 |
| ABCD Nyheder | 2014 | 480.000 | 440000 |
| ABCD Nyheder | 2015 | 490000 | 480.000 |
| ABCD Nyheder | 2016 | 500.000 | 490000 |
| ABCD Nyheder | 2017 | 520.000 | 500.000 |
| ABCD Nyheder | 2018 | 525000 | 520.000 |
| ABCD Nyheder | 2019 | 540.000 | 525000 |
| ABCD Nyheder | 2020 | 550.000 | 540.000 |
| Z Nyheder | 2016 | 720.000 | 0 |
| Z Nyheder | 2017 | 750.000 | 720.000 |
| Z Nyheder | 2018 | 780.000 | 750.000 |
| Z Nyheder | 2019 | 880.000 | 780.000 |
| Z Nyheder | 2020 | 910000 | 880.000 |
I ovenstående eksempel har vi 2 tv-nyhedskanaler, hvis nuværende og forrige års omsætning præsenteres på samme række ved hjælp af LAG()-funktionen. Som du kan se, at den allerførste rekord for hver af TV-nyhedskanalerne ikke har tidligere års omsætning, så den viser standardværdien på 0. Denne funktion kan være meget nyttig til at give data til BI-rapporter, når du vil sammenligne værdier i sammenhængende perioder, for f.eks. År til år eller kvartal til kvartal eller daglige sammenligninger.
Eksempel 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];>
Produktion:
| Organisation | År | Indtægter | Forrige Års Omsætning | YearOnYearGrowth |
|---|---|---|---|---|
| ABCD Nyheder | 2013 | 440000 | NUL | NUL |
| ABCD Nyheder | 2014 | 480.000 | 440000 | 40.000 |
| ABCD Nyheder | 2015 | 490000 | 480.000 | 10.000 |
| ABCD Nyheder | 2016 | 500.000 | 490000 | 10.000 |
| ABCD Nyheder | 2017 | 520.000 | 500.000 | 20.000 |
| ABCD Nyheder | 2018 | 525000 | 520.000 | 5000 |
| ABCD Nyheder | 2019 | 540.000 | 525000 | 15.000 |
| ABCD Nyheder | 2020 | 550.000 | 540.000 | 10.000 |
| Z Nyheder | 2016 | 720.000 | NUL | NUL |
| Z Nyheder | 2017 | 750.000 | 720.000 | 30.000 |
| Z Nyheder | 2018 | 780.000 | 750.000 | 30.000 |
| Z Nyheder | 2019 | 880.000 | 780.000 | 100.000 |
| Z Nyheder | 2020 | 910000 | 880.000 | 30.000 |
I ovenstående eksempel kan vi på samme måde beregne år til år vækst for tv-nyhedskanalen. En ting at bemærke i dette eksempel er, at vi ikke har leveret nogen standardparameter til LAG(), og derfor returnerer LAG()-funktionen NULL, hvis der ikke er nogen tidligere værdier. LAG()-funktionen kan implementeres på databaseniveau, og BI-rapporteringsløsninger som Power BI og Tableau kan undgå at bruge de besværlige foranstaltninger på rapporteringslaget.
hjemmeside som coomeet
Vigtige punkter om SQL LAG() funktion
- SQL LAG()-funktionen er en vinduesfunktion, der giver brugere adgang til data fra tidligere rækker i et datasæt.
- Det gør det muligt for brugere at sammenligne aktuelle rækkeværdier med værdier fra tidligere rækker, især dem, der er relateret til tid eller specifikke kolonner.
- LAG()-funktionen er værdifuld til at analysere ændringer over tid, såsom aktiemarkedsdata, daglige tendenser og ændringer i flere kolonner.