SQL LAG()-funksjonen er en vindusfunksjon som gir tilgang til en rad med en spesifisert fysisk forskyvning som kommer før gjeldende rad .
LAG-funksjon i SQL Server er vant til sammenligne gjeldende radverdier med verdier fra forrige rad.
nettverksarkitektur
Syntaks
De LAG-funksjonssyntaks er:
.LAG (scalar_expression [, offset [, default ]]) OVER ( [ partition_by_clause ] order_by_clause )
Hvor :
- skalaruttrykk – Verdien som skal returneres basert på spesifisert offset.
- offset - Antall rader tilbake fra gjeldende rad som det skal hentes en verdi fra. Hvis ikke spesifisert, er standard 1.
- standard – standard er verdien som skal returneres hvis forskyvningen går utover omfanget av partisjonen. Hvis en standardverdi ikke er spesifisert, returneres NULL.
- partisjon_etter_klausul: En valgfri klausul som deler resultatsettet inn i partisjoner. LAG()-funksjonen brukes på hver partisjon separat.
- ordre_etter_klausul: Rekkefølgen på radene innenfor hver partisjon. Dette er obligatorisk og må spesifiseres.
SQL LAG()-funksjonseksempel
La oss se på noen eksempler på SQL LAG-funksjon og forstå hvordan du bruker LAG-funksjon 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];>
Produksjon:
| Organisasjon | År | Inntekter | ForrigeÅrinntekt |
|---|---|---|---|
| ABCD Nyheter | 2013 | 440 000 | 0 |
| ABCD Nyheter | 2014 | 480 000 | 440 000 |
| ABCD Nyheter | 2015 | 490 000 | 480 000 |
| ABCD Nyheter | 2016 | 500 000 | 490 000 |
| ABCD Nyheter | 2017 | 520 000 | 500 000 |
| ABCD Nyheter | 2018 | 525 000 | 520 000 |
| ABCD Nyheter | 2019 | 540 000 | 525 000 |
| ABCD Nyheter | 2020 | 550 000 | 540 000 |
| Z Nyheter | 2016 | 720 000 | 0 |
| Z Nyheter | 2017 | 750 000 | 720 000 |
| Z Nyheter | 2018 | 780 000 | 750 000 |
| Z Nyheter | 2019 | 880 000 | 780 000 |
| Z Nyheter | 2020 | 910 000 | 880 000 |
I eksemplet ovenfor har vi 2 TV-nyhetskanaler hvis inntekter for nåværende og forrige år presenteres på samme rad ved å bruke LAG()-funksjonen. Som Du kan se at den aller første posten for hver av TV-nyhetskanalene ikke har tidligere års inntekter, så den viser standardverdien på 0. Denne funksjonen kan være svært nyttig for å gi data for BI-rapporter når du vil sammenligne verdier i sammenhengende perioder, for f.eks. År for år eller kvartal for 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];>
Produksjon:
| Organisasjon | År | Inntekter | ForrigeÅrinntekt | YearOnYearGrowth |
|---|---|---|---|---|
| ABCD Nyheter | 2013 | 440 000 | NULL | NULL |
| ABCD Nyheter | 2014 | 480 000 | 440 000 | 40 000 |
| ABCD Nyheter | 2015 | 490 000 | 480 000 | 10 000 |
| ABCD Nyheter | 2016 | 500 000 | 490 000 | 10 000 |
| ABCD Nyheter | 2017 | 520 000 | 500 000 | 20 000 |
| ABCD Nyheter | 2018 | 525 000 | 520 000 | 5000 |
| ABCD Nyheter | 2019 | 540 000 | 525 000 | 15 000 |
| ABCD Nyheter | 2020 | 550 000 | 540 000 | 10 000 |
| Z Nyheter | 2016 | 720 000 | NULL | NULL |
| Z Nyheter | 2017 | 750 000 | 720 000 | 30 000 |
| Z Nyheter | 2018 | 780 000 | 750 000 | 30 000 |
| Z Nyheter | 2019 | 880 000 | 780 000 | 100 000 |
| Z Nyheter | 2020 | 910 000 | 880 000 | 30 000 |
I eksemplet ovenfor kan vi på samme måte beregne år-til-år-vekst for TV-nyhetskanalen. En ting å merke seg i dette eksemplet er også at vi ikke har oppgitt noen standardparameter til LAG(), og derfor returnerer LAG()-funksjonen NULL i tilfelle det ikke er noen tidligere verdier. LAG()-funksjonen kan implementeres på databasenivå, og BI-rapporteringsløsninger som Power BI og Tableau kan unngå å bruke de tungvinte tiltakene i rapporteringslaget.
linux snarveier
Viktige punkter om SQL LAG()-funksjonen
- SQL LAG()-funksjonen er en vindusfunksjon som lar brukere få tilgang til data fra tidligere rader i et datasett.
- Det gjør det mulig for brukere å sammenligne gjeldende radverdier med verdier fra tidligere rader, spesielt de som er relatert til tid eller spesifikke kolonner.
- LAG()-funksjonen er verdifull for å analysere endringer over tid, for eksempel aksjemarkedsdata, daglige trender og endringer i flere kolonner.