跳至主要内容
Workday User Guide
上次更新时间 :2023-06-23
LAG

LAG

描述

LAG
是一个窗口聚合函数,用于对行进行分组,按字段对行进行排序,并返回组中当前行之前(上方)指定偏移量处的字段值。
PARTITION BY
子句确定使用哪些字段对一组输入行进行分组。该
ORDER BY
子句决定如何对分区中的行进行排序。
Workday 会根据分区字段将输入行分组,根据排序字段对行进行排序,然后计算每个组中的聚合表达式(此函数的滞后表达式)。

语法

LAG
(
input_field
,
offset
,
default_value
)
OVER
(
PARTITION BY
partitioning_field
[,
partitioning_field
]
ORDER BY
ordering_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 BY
ordering_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