LAG
Omschrijving
LAG
is een aggregatiefunctie voor vensters die rijen partitioneert in groepen, rijen ordent op een veld en de waarde van een veld in de rij op de opgegeven verschuiving vóór (boven) de huidige rij in de groep retourneert.De
PARTITION BY
bepaalt welke velden moeten worden gebruikt om een set invoerrijen in groepen te partitioneren. De ORDER BY
bepaalt hoe de rijen in de partitie worden gerangschikt.De invoerrijen worden in groepen gescheiden in groepen op basis van de partitioneringsvelden, de rijen worden geordend op basis van de volgordevelden en berekent vervolgens de aggregatieexpressie (vertraging voor deze functie) in elke groep.
Syntaxis
LAG(input_field,offset,default_value)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Retourwaarde
Retourneert één waarde per rij van hetzelfde type als het
invoerveld
.Invoerparameters
- input_field
- Vereist. Het veld waarop de aggregatiefunctie moet worden uitgevoerd. U kunt elk veldtype opgeven.
- verschuiving
- Optioneel. Het aantal rijen vóór de huidige rij waarvan de waarde moet worden geretourneerd. Moet een letterlijk getal zijn dat groter is dan of gelijk is aan nul (0) en kleiner is dan of gelijk is aan 100. Als u de verschuiving niet opgeeft, wordt in Workday de waarde 1 gebruikt.
- default_value
- Optioneel. De waarde die deze functie retourneert wanneer de verschuivingsrij buiten het momenteel gedefinieerde venster valt of wanneer de waarde in de verschuivingsrij NULL is.standaardwaardemoet van hetzelfde type zijn alsinvoerveld. Als u geen standaardwaarde opgeeft, wordt de waarde NULL gebruikt.
- OVER()
- Vereist.OVERmoet worden gebruikt binnen aLAGexpressie.
- PARTITION BYpartitioning_field
- Vereist. De . gebruikenPARTITION BYom een of meer velden op te geven voor het partitioneren van een groep invoerrijen. U kunt elk veldtype opgeven, behalve Valuta. Voorbeeld: u geeft het veld Maand op als het partitioneringsveld, zodat alle records met dezelfde waarde voor Maand in één partitie worden gegroepeerd.
- ORDER BYordering_field
- Vereist. De . gebruikenORDER BYom op te geven hoe de invoerrijen in de partitie moeten worden geordend met behulp van de waarden in het opgegeven veld binnen elke partitie. U kunt elk veldtype opgeven, behalve Valuta.U kunt de gebruikenDESCofASCtrefwoorden om te sorteren in aflopende volgorde (van hoge naar lage waarden, NULL-waarden zijn laatste) of oplopende volgorde (van lage naar hoge waarden, NULL-waarden zijn eerst) voor elk bestelveld. Als u geen sorteervolgorde voor een bestelveld opgeeft, worden de rijen automatisch in oplopende volgorde gesorteerd.
Voorbeelden
Voorbeeld: u hebt een gegevensset met deze rijen en velden.
row_ID | Employee_Name | Eff_Date | Salaris |
|---|---|---|---|
1 | Goho | 01-01-18 | 49000 |
2 | Goho | 01-01-19 | 56000 |
3 | Goho | 1-1-17 | 44000 |
4 | Freeman | 01-01-18 | 65000 |
5 | Freeman | 1-1-17 | 57000 |
6 | Freeman | 01-01-19 | 69000 |
7 | Smit | 01-01-18 | 51000 |
8 | Smit | 01-01-19 | 56000 |
9 | Smit | 01-01-16 | 44000 |
U kunt de rijen voor elke werknemer in oplopende volgorde ordenen op het veld 'Ingangsdatum' (
Eff_Date
), zodat het meest recente salaris eerst wordt in elke partitie.Gebruik deze expressie in het veld
Salary_Increase
om de salariswijziging tussen elke wijziging van de ingangsdatum te berekenen:[Salary] - (LAG([Salary], 1, [Salary]) OVER( PARTITION BY [Employee_Name] ORDER BY [Eff_Date] ASC) )
U krijgt de volgende resultaten:
row_ID | Employee_Name | Eff_Date | Salaris | Salary_Increase |
|---|---|---|---|---|
2 | Goho | 01-01-19 | 56000 | 7000 |
1 | Goho | 01-01-18 | 49000 | 5000 |
3 | Goho | 1-1-17 | 44000 | 0 |
6 | Freeman | 01-01-19 | 69000 | 4000 |
4 | Freeman | 01-01-18 | 65000 | 8000 |
5 | Freeman | 1-1-17 | 57000 | 0 |
8 | Smit | 01-01-19 | 56000 | 5000 |
7 | Smit | 01-01-18 | 51000 | 7000 |
9 | Smit | 01-01-16 | 44000 | 0 |