logo

SQL LAG()-functie

De SQL LAG()-functie is een vensterfunctie die toegang biedt tot een rij met een gespecificeerde fysieke offset die vóór de huidige rij komt .

LAG-functie in SQL Server is gewend aan vergelijk de huidige rijwaarden met waarden uit de vorige rij.



Syntaxis

De LAG-functiesyntaxis is:

.LAG (scalaire_expressie [, offset [, standaard]]) OVER ( [ partitie_by_clause ] order_by_clause )

Waar :



  • scalaire_expressie – De waarde die moet worden geretourneerd op basis van de opgegeven offset.
  • gecompenseerd – Het aantal rijen terug vanaf de huidige rij waaruit een waarde moet worden verkregen. Indien niet gespecificeerd, is de standaardwaarde 1.
  • standaard - standaard is de waarde die moet worden geretourneerd als de offset buiten het bereik van de partitie valt. Als er geen standaardwaarde is opgegeven, wordt NULL geretourneerd.
  • partitie_by_clausule: Een optionele clausule die de resultaatset in partities verdeelt. De functie LAG() wordt afzonderlijk op elke partitie toegepast.
  • order_by_clause: De volgorde van de rijen binnen elke partitie. Dit is verplicht en moet worden gespecificeerd.

SQL LAG() Functievoorbeeld

Laten we enkele voorbeelden van de SQL LAG-functie bekijken en begrijpen hoe u de LAG-functie in SQL Server kunt gebruiken.

voorbeeld 1

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

Uitgang:

Organisatie Jaar Winst Vorig jaaromzet
ABCD-nieuws 2013 440000 0
ABCD-nieuws 2014 480000 440000
ABCD-nieuws 2015 490000 480000
ABCD-nieuws 2016 500000 490000
ABCD-nieuws 2017 520000 500000
ABCD-nieuws 2018 525000 520000
ABCD-nieuws 2019 540000 525000
ABCD-nieuws 2020 550000 540000
Z Nieuws 2016 720000 0
Z Nieuws 2017 750000 720000
Z Nieuws 2018 780000 750000
Z Nieuws 2019 880000 780000
Z Nieuws 2020 910000 880000

In het bovenstaande voorbeeld hebben we twee tv-nieuwskanalen waarvan de huidige en voorgaande jaaropbrengsten in dezelfde rij worden weergegeven met behulp van de functie LAG(). Zoals u kunt zien, heeft de allereerste record voor elk van de TV-nieuwskanalen geen inkomsten uit het voorgaande jaar, dus wordt de standaardwaarde 0 weergegeven. Deze functie kan erg handig zijn bij het verkrijgen van gegevens voor BI-rapporten wanneer u waarden wilt vergelijken. in opeenvolgende perioden, voor b.v. Jaar na jaar of kwartaal na kwartaal of dagelijkse vergelijkingen.



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

Uitgang:

Organisatie Jaar Winst Vorig jaaromzet JaarOpJaarGroei
ABCD-nieuws 2013 440000 NUL NUL
ABCD-nieuws 2014 480000 440000 40000
ABCD-nieuws 2015 490000 480000 10000
ABCD-nieuws 2016 500000 490000 10000
ABCD-nieuws 2017 520000 500000 20000
ABCD-nieuws 2018 525000 520000 5000
ABCD-nieuws 2019 540000 525000 15000
ABCD-nieuws 2020 550000 540000 10000
Z Nieuws 2016 720000 NUL NUL
Z Nieuws 2017 750000 720000 30000
Z Nieuws 2018 780000 750000 30000
Z Nieuws 2019 880000 780000 100000
Z Nieuws 2020 910000 880000 30000

In het bovenstaande voorbeeld kunnen we op dezelfde manier de jaarlijkse groei voor het tv-nieuwskanaal berekenen. Een ding om op te merken in dit voorbeeld is dat we geen standaardparameter aan LAG() hebben opgegeven, en daarom retourneert de functie LAG() NULL als er geen eerdere waarden zijn. De LAG()-functie kan op databaseniveau worden geïmplementeerd en BI Reporting-oplossingen zoals Power BI en Tableau kunnen het gebruik van de omslachtige maatregelen op de rapportagelaag vermijden.

Belangrijke punten over de SQL LAG()-functie

  • De SQL LAG()-functie is een vensterfunctie waarmee gebruikers toegang kunnen krijgen tot gegevens uit eerdere rijen in een gegevensset.
  • Hiermee kunnen gebruikers de huidige rijwaarden vergelijken met waarden uit eerdere rijen, vooral die gerelateerd aan tijd of specifieke kolommen.
  • De functie LAG() is waardevol voor het analyseren van veranderingen in de loop van de tijd, zoals aandelenmarktgegevens, dagelijkse trends en wijzigingen in meerdere kolommen.