LAG
Descripción
LAG
es una función de agregado de ventana que divide las filas en grupos, ordena las filas por un campo y devuelve el valor de un campo de la fila en el desplazamiento especificado antes (por encima) de la fila actual del grupo.El
PARTITION BY
determina qué campos se utilizarán para dividir un conjunto de filas de entrada en grupos. El ORDER BY
determina cómo ordenar las filas en la partición.Workday separa las filas de entrada en grupos según los campos de partición, ordena las filas según los campos de ordenación y, a continuación, calcula la expresión agregada (retraso para esta función) en cada grupo.
Sintaxis
LAG(input_field,offset,default_value)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Valor devuelto
Devuelve un valor por fila del mismo tipo que
input_field
.Parámetros de entrada
- input_field
- Es obligatorio. El campo en el que se va a realizar la función de agregado. Puede especificar cualquier tipo de campo.
- offset
- Opcional. El número de filas antes de la fila actual cuyo valor se va a devolver. Debe ser un número literal superior o igual a cero (0) e inferior o igual a 100. Si no especifica la compensación, Workday utiliza el valor 1.
- default_value
- Opcional. El valor que devuelve esta función cuando la fila de compensación está fuera de la ventana definida actualmente o cuando el valor de la fila de compensación es NULL.default_valuedebe ser del mismo tipo queinput_field. Si no especifica un valor por defecto, Workday utiliza el valor NULL.
- OVER()
- ObligatorioOVERdebe utilizarse en unLAGexpresión
- PARTICIÓN PORcampo_partición
- Es obligatorio. Utilizar elPARTITION BYpara especificar uno o varios campos que se utilizarán para dividir un grupo de filas de entrada. Puede especificar cualquier tipo de campo excepto Moneda. Ejemplo: especifica el campo Mes como campo de partición, por lo que Workday agrupa en una sola partición todos los registros que tienen el mismo valor para Mes.
- ORDER BYordering_field
- Es obligatorio. Utilizar elORDER BYpara especificar cómo ordenar las filas de entrada en la partición utilizando los valores del campo especificado dentro de cada partición. Puede especificar cualquier tipo de campo excepto Moneda.Puede utilizar elDESCoASCpalabras clave para ordenar en orden descendente (valores de mayor a menor, los valores NULL son los últimos) o ascendente (valores de menor a mayor, los valores NULL son los primeros) para cada campo de ordenación. Si no especifica un criterio de ordenación para un campo de ordenación, Workday ordena automáticamente las filas en orden ascendente.
Ejemplos
Ejemplo: tiene un conjunto de datos con estas filas y campos.
row_ID | Employee_Name | Eff_Date | Salarial |
|---|---|---|---|
1 | Goh | 1/1/18 | 49000 |
2 | Goh | 1/1/19 | 56000 |
3 | Goh | 1/1/17 | 44000 |
4 | Freeman | 1/1/18 | 65000 |
5 | Freeman | 1/1/17 | 57000 |
6 | Freeman | 1/1/19 | 69000 |
7 | Herrero | 1/1/18 | 51000 |
8 | Herrero | 1/1/19 | 56000 |
9 | Herrero | 1/1/16 | 44000 |
Puede ordenar las filas de cada empleado en orden ascendente (ASC) por el campo de fecha efectiva (
Eff_Date
), de modo que el salario más reciente aparezca primero en cada partición.Utilice esta expresión en el campo
Salary_Increase
para calcular el cambio de salario entre cada cambio en la fecha efectiva:[Salary] - (LAG([Salary], 1, [Salary]) OVER( PARTITION BY [Employee_Name] ORDER BY [Eff_Date] ASC) )
Obtiene los siguientes resultados:
row_ID | Employee_Name | Eff_Date | Salarial | Incremento_de_salario |
|---|---|---|---|---|
2 | Goh | 1/1/19 | 56000 | 7000 |
1 | Goh | 1/1/18 | 49000 | 5000 |
3 | Goh | 1/1/17 | 44000 | 0 |
6 | Freeman | 1/1/19 | 69000 | 4000 |
4 | Freeman | 1/1/18 | 65000 | 8000 |
5 | Freeman | 1/1/17 | 57000 | 0 |
8 | Herrero | 1/1/19 | 56000 | 5000 |
7 | Herrero | 1/1/18 | 51000 | 7000 |
9 | Herrero | 1/1/16 | 44000 | 0 |