ROW_NUMBER
說明
ROW_NUMBER
是一個視窗匯總函數,用於將列分組、依欄位對列進行排序,並為群組中的每一列指派唯一的連續編號,每個群組中的第一列從 1 開始。 ROW_NUMBER
一律為群組中的每一列指派唯一的值。您可能想要使用 ROW_NUMBER
,為資料集中的每一列建立唯一的 ID。該
PARTITION BY
子句決定要使用哪些欄位來將一組輸入列分組。該
ORDER BY
子句會決定在為分區中的列指派序號之前,如何排序這些列。Workday 會根據分區欄位將輸入列分組,根據排序欄位對列進行排序,然後計算每個群組中的匯總運算式 (此函數的列編號)。每個群組中的編號列從 1 開始。
語法
ROW_NUMBER()OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
傳回值
傳回值類型
INTEGER
。輸入參數
- OVER()
- 必填。OVER必須在以下範圍內使用ROW_NUMBER運算式。
- PARTITIONBYpartitioning_field
- 必填。使用PARTITION BY子句,指定一或多個欄位,用於對一組輸入列進行分區。您可以指定「貨幣」以外的任何欄位類型。例如,如果您將「月份」欄位指定為分區欄位,Workday 會將「月份」值相同的所有記錄分組歸為單一分區。
- ORDER BYordering_field
- 必填。使用ORDER BY子句,使用每個分區內的指定欄位值,指定如何排序分區中的輸入列。您可以指定「貨幣」以外的任何欄位類型。您可以使用DESC或ASC關鍵字︰依每個排序欄位的遞減順序 (高到低,NULL 在最後) 或遞增順序 (低到高,NULL 在前) 進行排序。如果您未為排序欄位指定排序順序,Workday 會自動按遞增順序對列進行排序。
範例
範例︰您有一個包含以下列和欄位的資料集。
正職員工 | 銷售日期 | 銷售 |
|---|---|---|
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 |
斯密 | 12/31/2018 | 140 |
斯密 | 11/30/2018 | 60 |
斯密 | 10/31/2018 | 120 |
您可以按遞減順序為每個正職員工的銷售額指派唯一 ID,因此最高銷售額的排名為 1。請在
銷售額 (依正職員工)
欄位中使用以下運算式︰ROW_NUMBER() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
您會得到以下結果︰
正職員工 | 銷售日期 | 銷售 | 銷售人數 - 依正職員工 |
|---|---|---|---|
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 |
斯密 | 12/31/2018 | 140 | 1 |
斯密 | 10/31/2018 | 120 | 2 |
斯密 | 11/30/2018 | 60 | 3 |
您也可以按遞減順序為每個日期的銷售額指派唯一 ID,因此最高銷售額將獲得排名 1。請在
銷售數字 (依日期)
欄位中使用此運算式︰ROW_NUMBER() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
您會得到以下結果︰
正職員工 | 銷售日期 | 銷售 | 銷售額 - 依日期 |
|---|---|---|---|
弗里曼 | 12/31/2018 | 160 | 1 |
Goh | 12/31/2018 | 140 | 2 |
斯密 | 12/31/2018 | 140 | 3 |
Goh | 11/30/2018 | 60 | 1 |
弗里曼 | 11/30/2018 | 60 | 2 |
斯密 | 11/30/2018 | 60 | 3 |
Goh | 10/31/2018 | 140 | 1 |
斯密 | 10/31/2018 | 120 | 2 |
弗里曼 | 10/31/2018 | 110 | 3 |
您也可以使用
ROW_NUMBER
,確定每個 ID 包含多列的資料集中每一列的最新版本。在這種情況下,資料集需要一個日期欄位,以表示該列中的資訊成為最新資訊的時間。如果您熟悉資料倉儲概念,這就是類型 2 漸變維度表。您有一個包含這些列和欄位的資料集。ID | 名稱 | 區域 | 生效日期 |
|---|---|---|---|
G1 | 高曼 | West | 01/01/2015 |
H1 | 哈瑞斯 | West | 01/01/2015 |
G1 | 高曼 | 東 | 09/01/2016 |
H1 | 哈瑞斯 | 東 | 01/03/2017 |
H1 | 哈瑞斯 | 全國 | 01/20/2021 |
若要將值 1 指派給每個 ID 的最新版本,請在
「最新版本」
欄位中使用以下運算式︰ROW_NUMBER() OVER( PARTITION BY [ID] ORDER BY [Effective Date] DESC)
您會得到以下結果︰
ID | 名稱 | 區域 | 生效日期 | 最新版本 |
|---|---|---|---|---|
G1 | 高曼 | West | 01/01/2015 | 2 |
H1 | 哈瑞斯 | West | 01/01/2015 | 3 |
G1 | 高曼 | 東 | 09/01/2016 | 1 |
H1 | 哈瑞斯 | 東 | 01/03/2017 | 2 |
H1 | 哈瑞斯 | 全國 | 01/20/2021 | 1 |
您可以使用篩選階段根據
最新版本
進行篩選,以便僅傳回每個 ID 的最新列。