SQL LAG()-funktionen är en fönsterfunktion som ger tillgång till en rad med en specificerad fysisk offset som kommer före den aktuella raden .
LAG-funktion i SQL Server är van vid jämför nuvarande radvärden med värden från föregående rad.
Syntax
De LAG-funktionssyntax är:
.LAG (scalar_expression [, offset [, default ]]) OVER ( [ partition_by_clause ] order_by_clause )
Var :
- scalar_expression – Värdet som ska returneras baserat på den angivna offseten.
- offset – Antalet rader tillbaka från den aktuella raden för att få ett värde. Om det inte anges är standardvärdet 1.
- standard - standard är värdet som ska returneras om offset går utöver partitionens räckvidd. Om ett standardvärde inte anges returneras NULL.
- partition_efter_klausul: En valfri klausul som delar upp resultatuppsättningen i partitioner. Funktionen LAG() tillämpas på varje partition separat.
- order_by_clause: Ordningen på raderna inom varje partition. Detta är obligatoriskt och måste specificeras.
Exempel på SQL LAG()-funktion
Låt oss titta på några exempel på SQL LAG-funktion och förstå hur man använder LAG-funktionen i SQL Server.
Exempel 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 | Inkomst | Föregående årIntäkt |
---|---|---|---|
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 exemplet ovan har vi 2 TV-nyhetskanaler vars nuvarande och föregående års intäkter presenteras på samma rad med hjälp av LAG()-funktionen. Som Du kan se att den allra första posten för var och en av TV-nyhetskanalerna inte har tidigare års intäkter så den visar standardvärdet 0. Denna funktion kan vara mycket användbar för att ge data för BI-rapporter när du vill jämföra värden i på varandra följande perioder, för t.ex. Jämförelser från år till år eller kvartal för kvartal eller dagliga jämförelser.
Exempel 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 | Inkomst | Föregående årIntäkt | 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 | 5 000 |
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 exemplet ovan kan vi på liknande sätt beräkna tillväxten från år till år för TV-nyhetskanalen. En sak att lägga märke till i det här exemplet är att vi inte har tillhandahållit någon standardparameter till LAG(), och därför returnerar LAG()-funktionen NULL om det inte finns några tidigare värden. LAG()-funktionen kan implementeras på databasnivå och BI Reporting-lösningar som Power BI och Tableau kan undvika att använda de besvärliga åtgärderna i rapporteringsskiktet.
Viktiga punkter om SQL LAG()-funktionen
- SQL LAG()-funktionen är en fönsterfunktion som låter användare komma åt data från tidigare rader i en datauppsättning.
- Det gör det möjligt för användare att jämföra aktuella radvärden med värden från tidigare rader, särskilt de som är relaterade till tid eller specifika kolumner.
- Funktionen LAG() är värdefull för att analysera förändringar över tid, såsom börsdata, dagliga trender och förändringar i flera kolumner.