logo

SQL LAG() Funktion

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.