La funció SQL LAG(). és una funció de finestra que proporciona accés a una fila amb un desplaçament físic especificat que arriba abans de la fila actual .
Funció LAG a SQL Server està acostumat compareu els valors de la fila actual amb els de la fila anterior.
Sintaxi
El Sintaxi de la funció LAG és:
.LAG (expressió_escalar [, desplaçament [, predeterminat ]]) OVER ( [ partició_per_clàusula ] ordre_per_clàusula )
On :
- expressió_escalar - El valor que es retornarà en funció del desplaçament especificat.
- compensació - El nombre de files enrere des de la fila actual a partir de les quals cal obtenir un valor. Si no s'especifica, el valor per defecte és 1.
- per defecte - per defecte és el valor que es retornarà si l'offset va més enllà de l'abast de la partició. Si no s'especifica un valor predeterminat, es retorna NULL.
- partició_per_clàusula: Una clàusula opcional que divideix el conjunt de resultats en particions. La funció LAG() s'aplica a cada partició per separat.
- order_by_clause: L'ordre de les files dins de cada partició. Això és obligatori i s'ha d'especificar.
Exemple de funció SQL LAG().
Vegem alguns exemples de la funció SQL LAG i entenem com utilitzar la funció LAG a SQL Server.
Exemple 1
SELECT Organisation, [Year], Revenue, LAG (Revenue, 1, 0) OVER ( PARTITION BY Organisation ORDER BY [Year]) AS PrevYearRevenue FROM Org ORDER BY Organisation, [Year];>
Sortida:
| Organització | Curs | Ingressos | Ingressos de l'any anterior |
|---|---|---|---|
| Notícies ABCD | 2013 | 440000 | 0 |
| Notícies ABCD | 2014 | 480000 | 440000 |
| Notícies ABCD | 2015 | 490000 | 480000 |
| Notícies ABCD | 2016 | 500000 | 490000 |
| Notícies ABCD | 2017 | 520000 | 500000 |
| Notícies ABCD | 2018 | 525000 | 520000 |
| Notícies ABCD | 2019 | 540000 | 525000 |
| Notícies ABCD | 2020 | 550000 | 540000 |
| Z Notícies | 2016 | 720000 | 0 |
| Z Notícies | 2017 | 750000 | 720000 |
| Z Notícies | 2018 | 780000 | 750000 |
| Z Notícies | 2019 | 880000 | 780000 |
| Z Notícies | 2020 | 910000 | 880000 |
A l'exemple anterior, tenim 2 canals de notícies de televisió els ingressos de l'any actual i anterior es presenten a la mateixa fila mitjançant la funció LAG(). Com podeu veure que el primer registre de cadascun dels canals de notícies de televisió no té ingressos de l'any anterior, de manera que mostra el valor predeterminat de 0. Aquesta funció pot ser molt útil per obtenir dades per als informes de BI quan voleu comparar valors. en períodes consecutius, per ex. Comparacions interanuals o trimestrals o diàries.
Exemple 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];>
Sortida:
| Organització | Curs | Ingressos | Ingressos de l'any anterior | AnyOnYearGrowth |
|---|---|---|---|---|
| Notícies ABCD | 2013 | 440000 | NUL | NUL |
| Notícies ABCD | 2014 | 480000 | 440000 | 40000 |
| Notícies ABCD | 2015 | 490000 | 480000 | 10000 |
| Notícies ABCD | 2016 | 500000 | 490000 | 10000 |
| Notícies ABCD | 2017 | 520000 | 500000 | 20000 |
| Notícies ABCD | 2018 | 525000 | 520000 | 5000 |
| Notícies ABCD | 2019 | 540000 | 525000 | 15000 |
| Notícies ABCD | 2020 | 550000 | 540000 | 10000 |
| Z Notícies | 2016 | 720000 | NUL | NUL |
| Z Notícies | 2017 | 750000 | 720000 | 30000 |
| Z Notícies | 2018 | 780000 | 750000 | 30000 |
| Z Notícies | 2019 | 880000 | 780000 | 100000 |
| Z Notícies | 2020 | 910000 | 880000 | 30000 |
A l'exemple anterior, podem calcular de manera similar el creixement anual del canal de notícies de televisió. A més, una cosa a notar en aquest exemple és que no hem proporcionat cap paràmetre per defecte a LAG(), i per tant la funció LAG() retorna NULL en cas que no hi hagi valors anteriors. La funció LAG() es pot implementar a nivell de base de dades i les solucions d'informes de BI com Power BI i Tableau poden evitar l'ús de mesures feixugues a la capa d'informes.
Punts importants sobre la funció SQL LAG().
- La funció SQL LAG() és una funció de finestra que permet als usuaris accedir a les dades de les files anteriors d'un conjunt de dades.
- Permet als usuaris comparar els valors de les files actuals amb els valors de les files anteriors, especialment els relacionats amb el temps o columnes específiques.
- La funció LAG() és valuosa per analitzar els canvis al llarg del temps, com ara dades de borsa, tendències diàries i alteracions en diverses columnes.