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式
- PARTITION BYdepartment_field
- 必須のコンテンツ。使用先PARTITION BY句: 入力行のグループを分割するために使用する 1 つ以上のフィールドを指定します。"通貨" を除く任意のフィールド タイプを指定できます。例: "月" フィールドを分割フィールドとして指定すると、"月" の値が同じすべてのレコードが 1 つの分割にグループ化されます。
- ORDER BYordering_field
- 必須のコンテンツ。使用先ORDER BY句。各分割内の指定されたフィールドの値を使用して、分割内の入力行を並べ替える方法を指定します。"通貨" を除く任意のフィールド タイプを指定できます。次の操作ができます。DESCまたはASC各順序フィールドを、降順 (値が高い順、NULL が最後になる) または昇順 (値が高い順、NULL が最初) でソートするキーワード。順序フィールドのソート順序を指定しない場合、行は自動的に昇順でソートされます。
例
例: これらの行とフィールドを含むデータセットがあります。
社員 | 販売日 | Sales |
|---|---|---|
ゴホ | 12/31/2018 | 140 |
ゴホ | 11/30/2018 | 60 |
ゴホ | 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 のランキングが付けられます。
"Sales Num by Employee"
フィールドで、次の式を使用します。ROW_NUMBER() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
以下の結果が得られます。
社員 | 販売日 | Sales | 社員別の売上数値 |
|---|---|---|---|
ゴホ | 12/31/2018 | 140 | 1 |
ゴホ | 10/31/2018 | 140 | 2 |
ゴホ | 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 のランキングが付けられます。
"Sales Num by Date"
フィールドで、次の式を使用します。ROW_NUMBER() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
以下の結果が得られます。
社員 | 販売日 | Sales | 日別の売上数値 |
|---|---|---|---|
フリーマン | 12/31/2018 | 160 | 1 |
ゴホ | 12/31/2018 | 140 | 2 |
セキュリティ | 12/31/2018 | 140 | 3 |
ゴホ | 11/30/2018 | 60 | 1 |
フリーマン | 11/30/2018 | 60 | 2 |
セキュリティ | 11/30/2018 | 60 | 3 |
ゴホ | 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 |
各 ID の最新バージョンに値 1 を割り当てるには、
"最新バージョン"
フィールドで次の式を使用します。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 に対して最新の行のみが返されます。