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.