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

ROW_NUMBER

描述

ROW_NUMBER
是一个窗口聚合函数,用于对行进行分组,按字段对行进行排序,并为组中的每一行指定一个唯一的连续编号。对于组中的第一行,从 1 开始 .
ROW_NUMBER
始终为组中的每一行指定唯一的值。您可能需要使用
ROW_NUMBER
为数据集中的每一行创建唯一编号。
PARTITION BY
子句确定使用哪些字段对一组输入行进行分组。
ORDER BY
子句决定了在为分区中的行指定序号之前,如何对其进行排序。
Workday 会根据分区字段将输入行分组,根据排序字段对行进行排序,然后计算每个组中的聚合表达式(此函数的行编号)。每组中的编号行从 1 开始。

语法

ROW_NUMBER
()
OVER
(
PARTITION BY
partitioning_field
[,
partitioning_field
]
ORDER BY
ordering_field
[ASC | DESC] [,
ordering_field
[ASC | DESC]] )

返回值

返回类型为
INTEGER

输入参数

OVER()
必填。
OVER
必须在 内使用
ROW_NUMBER
表达式。
PARTITION BY
分区字段
必修内容。使用
PARTITION BY
子句,可指定一个或多个字段,用于对一组输入行进行分区。您可以指定除币种以外的任何字段类型。示例:您将“月”字段指定为分区字段,以便 Workday 将具有相同“月”值的所有记录分组到一个分区中。
ORDER BY
ordering_field
必修内容。使用
ORDER BY
子句,以指定如何使用每个分区内指定字段中的值对分区中的输入行进行排序。您可以指定除币种以外的任何字段类型。
您可以使用
DESC
ASC
关键字,为每个排序字段按降序(从高到低的值,空值在最后)或升序(从低到高的值,空值在前)排序。如果您没有为排序字段指定排序顺序,Workday 会自动按升序对行进行排序。

示例

示例:您的数据集包含以下行和字段。
员工
销售日期
Sales
Goh
12/31/2018
140
Goh
11/30/2018
60
Goh
10/31/2018
140
费里曼
12/31/2018
160
费里曼
11/30/2018
60
费里曼
10/31/2018
110
Smith
12/31/2018
140
Smith
11/30/2018
60
Smith
10/31/2018
120
您可以为每个员工的销售额指定一个唯一的编号(按降序排列),将最高销售额的员工指定为排名 1。在
“销售数字(按员工)”
字段中使用以下表达式:
ROW_NUMBER() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
您将得到以下结果:
员工
销售日期
Sales
销售数字(按员工)
Goh
12/31/2018
140
1
Goh
10/31/2018
140
2
Goh
11/30/2018
60
3
费里曼
12/31/2018
160
1
费里曼
10/31/2018
110
2
费里曼
11/30/2018
60
3
Smith
12/31/2018
140
1
Smith
10/31/2018
120
2
Smith
11/30/2018
60
3
您还可以按降序为每个日期的销售额指定唯一的编号,将销售额最高的销售额指定为排名 1。在
“销售额(按日期)”
字段中使用以下表达式:
ROW_NUMBER() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
您将得到以下结果:
员工
销售日期
Sales
销售额(按日期)
费里曼
12/31/2018
160
1
Goh
12/31/2018
140
2
Smith
12/31/2018
140
3
Goh
11/30/2018
60
1
费里曼
11/30/2018
60
2
Smith
11/30/2018
60
3
Goh
10/31/2018
140
1
Smith
10/31/2018
120
2
费里曼
10/31/2018
110
3
您还可以使用
ROW_NUMBER
针对每个编号包含多行的数据集中,确定每一行的最新版本。在这种情况下,数据集需要一个日期字段,用于表示该行中的信息生效的时间。如果您熟悉数据仓库的概念,就会知道这是一个类型 2 缓慢变化的维度表。您的数据集包含以下行和字段。
编号
名称
区域
生效日期
G1
高曼
West
01/01/2015
H1
Harris
West
01/01/2015
G1
高曼
East
09/01/2016
H1
Harris
East
01/03/2017
H1
Harris
居民身份证件
01/20/2021
要将值 1 指定给每个编号的最新版本,请在
“最新版本”
字段中使用以下表达式:
ROW_NUMBER() OVER( PARTITION BY [ID] ORDER BY [Effective Date] DESC)
您将得到以下结果:
编号
名称
区域
生效日期
最新版本
G1
高曼
West
01/01/2015
2
H1
Harris
West
01/01/2015
3
G1
高曼
East
09/01/2016
1
H1
Harris
East
01/03/2017
2
H1
Harris
居民身份证件
01/20/2021
1
您可以使用“筛选器阶段”按
“最新版本”
进行筛选,以便仅为每个编号仅返回最新的行。