logo

Funkcija SQL LAG().

Funkcija SQL LAG(). je okenska funkcija, ki omogoča dostop do vrstice pri določenem fizičnem odmiku, ki je pred trenutno vrstico .

Funkcija LAG v strežniku SQL Server je navajen primerja vrednosti trenutne vrstice z vrednostmi iz prejšnje vrstice.



Sintaksa

The Sintaksa funkcije LAG je:

.LAG (skalarni_izraz [, odmik [, privzeto ]]) OVER ( [particija_po_členu] naročilo_po_členu)

Kje :



  • skalarni_izraz – Vrednost, ki bo vrnjena na podlagi podanega odmika.
  • odmik – Število vrstic nazaj od trenutne vrstice, iz katere je treba pridobiti vrednost. Če ni navedeno, je privzeta vrednost 1.
  • privzeto – privzeto vrednost je vrnjena, če odmik presega obseg particije. Če privzeta vrednost ni podana, je vrnjena vrednost NULL.
  • particija_po_členu: Izbirna klavzula, ki razdeli niz rezultatov na particije. Funkcija LAG() se uporabi za vsako particijo posebej.
  • order_by_clause: Vrstni red vrstic v vsaki particiji. To je obvezno in mora biti določeno.

Primer funkcije SQL LAG().

Oglejmo si nekaj primerov funkcije LAG SQL in razumemo, kako uporabljati funkcijo LAG v strežniku SQL Server.

Primer 1

  SELECT   Organisation, [Year], Revenue,   LAG   (Revenue, 1, 0)    OVER   (  PARTITION BY   Organisation   ORDER BY   [Year])   AS   PrevYearRevenue    FROM   Org    ORDER BY   Organisation, [Year];>

Izhod:

Organizacija leto Prihodki PrevYearRevenue
Novice ABCD 2013 440000 0
Novice ABCD 2014 480000 440000
Novice ABCD 2015 490000 480000
Novice ABCD 2016 500000 490000
Novice ABCD 2017 520000 500000
Novice ABCD 2018 525000 520000
Novice ABCD 2019 540000 525000
Novice ABCD 2020 550000 540000
Z Novice 2016 720000 0
Z Novice 2017 750000 720000
Z Novice 2018 780000 750000
Z Novice 2019 880000 780000
Z Novice 2020 910000 880000

V zgornjem primeru imamo 2 televizijska kanala z novicami, katerih prihodki za tekoče in prejšnje leto so predstavljeni v isti vrstici s funkcijo LAG(). Kot lahko vidite, prvi zapis za vsakega od kanalov TV novic nima prihodkov iz prejšnjega leta, zato prikazuje privzeto vrednost 0. Ta funkcija je lahko zelo uporabna pri pridobivanju podatkov za poročila BI, ko želite primerjati vrednosti v zaporednih obdobjih, npr. Leto za letom ali četrtletje za četrtletjem ali dnevne primerjave.



Primer 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];>

Izhod:

Organizacija leto Prihodki PrevYearRevenue YearOnYearGrowth
Novice ABCD 2013 440000 NIČ NIČ
Novice ABCD 2014 480000 440000 40000
Novice ABCD 2015 490000 480000 10000
Novice ABCD 2016 500000 490000 10000
Novice ABCD 2017 520000 500000 20000
Novice ABCD 2018 525000 520000 5000
Novice ABCD 2019 540000 525000 15000
Novice ABCD 2020 550000 540000 10000
Z Novice 2016 720000 NIČ NIČ
Z Novice 2017 750000 720000 30000
Z Novice 2018 780000 750000 30000
Z Novice 2019 880000 780000 100000
Z Novice 2020 910000 880000 30000

V zgornjem primeru lahko podobno izračunamo medletno rast za TV News Channel. V tem primeru je treba opozoriti tudi na to, da LAG() nismo posredovali nobenega privzetega parametra, zato funkcija LAG() vrne NULL, če ni prejšnjih vrednosti. Funkcijo LAG() je mogoče implementirati na ravni baze podatkov, rešitve za poročanje BI, kot sta Power BI in Tableau, pa se lahko izognejo uporabi okornih ukrepov na ravni poročanja.

Pomembne točke o funkciji SQL LAG().

  • Funkcija SQL LAG() je okenska funkcija, ki uporabnikom omogoča dostop do podatkov iz prejšnjih vrstic v naboru podatkov.
  • Uporabnikom omogoča primerjavo trenutnih vrednosti vrstic z vrednostmi iz prejšnjih vrstic, zlasti tistih, ki so povezane s časom ali določenimi stolpci.
  • Funkcija LAG() je dragocena za analiziranje sprememb skozi čas, kot so borzni podatki, dnevni trendi in spremembe v več stolpcih.