LAG
描述
LAG
是一个窗口聚合函数,用于对行进行分组,按字段对行进行排序,并返回组中当前行之前(上方)指定偏移量处的字段值。该
PARTITION BY
子句确定使用哪些字段对一组输入行进行分组。该 ORDER BY
子句决定如何对分区中的行进行排序。Workday 会根据分区字段将输入行分组,根据排序字段对行进行排序,然后计算每个组中的聚合表达式(此函数的滞后表达式)。
语法
LAG(input_field,offset,default_value)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
返回值
每行返回一个与
input_field
类型相同的值。输入参数
- input_field
- 必修内容。要执行聚合函数操作的字段。您可以指定任何字段类型。
- offset
- (可选)要返回其值的当前行之前的行数。必须为大于或等于零 (0) 且小于或等于 100 的字面量数字。如果您未指定偏移量,Workday 将使用值 1。
- default_value
- (可选)当偏移行位于当前定义的窗口之外或者偏移行中的值为空时,此函数返回的值。default_value必须与input_field属于同一类型。如果您未指定默认值,Workday 将使用 NULL 值。
- OVER()
- 必填。OVER必须在 内使用LAG表达式。
- PARTITION BY分区字段
- 必修内容。使用PARTITION BY子句,可指定一个或多个字段,用于对一组输入行进行分区。您可以指定除币种以外的任何字段类型。示例:您将“月”字段指定为分区字段,以便 Workday 将具有相同“月”值的所有记录分组到一个分区中。
- ORDER BYordering_field
- 必修内容。使用ORDER BY子句,以指定如何使用每个分区内指定字段中的值对分区中的输入行进行排序。您可以指定除币种以外的任何字段类型。您可以使用DESC或ASC关键字,为每个排序字段按降序(从高到低的值,空值在最后)或升序(从低到高的值,空值在前)排序。如果您没有为排序字段指定排序顺序,Workday 会自动按升序对行进行排序。
示例
示例:您的数据集包含以下行和字段。
row_ID | Employee_Name(员工姓名) | Eff_Date | 工资 |
|---|---|---|---|
1 | Goh | 1/1/18 | 49000 |
2 | Goh | 1/1/19 | 56000 |
3 | Goh | 2017 年 1 月 1 日 | 44000 |
4 | 费里曼 | 1/1/18 | 65000 |
5 | 费里曼 | 2017 年 1 月 1 日 | 57000 |
6 | 费里曼 | 1/1/19 | 69000 |
7 | Smith | 1/1/18 | 51000 |
8 | Smith | 1/1/19 | 56000 |
9 | Smith | 1/1/16 | 44000 |
您可以按生效日期 (
Eff_Date
) 字段,按升序 (ASC) 对每个员工的行进行排序,使最新的工资在每个分区中排在首位。在
“Salary_Increase”
字段中使用以下表达式来计算每个生效日期变更之间的工资变更:[Salary] - (LAG([Salary], 1, [Salary]) OVER( PARTITION BY [Employee_Name] ORDER BY [Eff_Date] ASC) )
您将得到以下结果:
row_ID | Employee_Name(员工姓名) | Eff_Date | 工资 | Salary_Increase |
|---|---|---|---|---|
2 | Goh | 1/1/19 | 56000 | 7000 |
1 | Goh | 1/1/18 | 49000 | 5000 |
3 | Goh | 2017 年 1 月 1 日 | 44000 | 0 |
6 | 费里曼 | 1/1/19 | 69000 | 4000 |
4 | 费里曼 | 1/1/18 | 65000 | 8000 |
5 | 费里曼 | 2017 年 1 月 1 日 | 57000 | 0 |
8 | Smith | 1/1/19 | 56000 | 5000 |
7 | Smith | 1/1/18 | 51000 | 7000 |
9 | Smith | 1/1/16 | 44000 | 0 |