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]] )
戻り値
入力_フィールド
と同じ型の行ごとに 1 つの値を返します。入力パラメータ
- input_field
- 必須のコンテンツ。集計関数を実行するフィールド。任意のフィールド タイプを指定できます。
- offset
- 任意です。現在の行より前の値を返す行数。ゼロ (0) 以上 100 以下のリテラル数値を指定する必要があります。オフセットを指定しない場合、値 1 が使用されます。
- default_value
- 任意です。オフセット行が現在定義されているウィンドウの外部にある場合、またはオフセット行の値が NULL である場合にこの関数が返す値。Default_value は、input_fieldと同じ型である必要があります。デフォルト値を指定しない場合、"NULL" 値が使用されます。
- OVER()
- 必須のコンテンツ。OVER"" 内で使用する必要がありますLAG式
- PARTITION BYdepartment_field
- 必須のコンテンツ。使用先PARTITION BY句: 入力行のグループを分割するために使用する 1 つ以上のフィールドを指定します。"通貨" を除く任意のフィールド タイプを指定できます。例: "月" フィールドを分割フィールドとして指定すると、"月" の値が同じすべてのレコードが 1 つの分割にグループ化されます。
- ORDER BYordering_field
- 必須のコンテンツ。使用先ORDER BY句。各分割内の指定されたフィールドの値を使用して、分割内の入力行を並べ替える方法を指定します。"通貨" を除く任意のフィールド タイプを指定できます。次の操作ができます。DESCまたはASC各順序フィールドを、降順 (値が高い順、NULL が最後になる) または昇順 (値が高い順、NULL が最初) でソートするキーワード。順序フィールドのソート順序を指定しない場合、行は自動的に昇順でソートされます。
例
例: これらの行とフィールドを含むデータセットがあります。
row_ID | Employee_Name | Eff_Date | 給与 |
|---|---|---|---|
1 | ゴホ | 1/1/18 | 49000 |
2 | ゴホ | 1/1/19 | 56000 |
3 | ゴホ | 2017/01/01 | 44000 |
4 | フリーマン | 1/1/18 | 65000 |
5 | フリーマン | 2017/01/01 | 57000 |
6 | フリーマン | 1/1/19 | 69000 |
7 | セキュリティ | 1/1/18 | 51000 |
8 | セキュリティ | 1/1/19 | 56000 |
9 | セキュリティ | 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 | ゴホ | 1/1/19 | 56000 | 7000 |
1 | ゴホ | 1/1/18 | 49000 | 5000 |
3 | ゴホ | 2017/01/01 | 44000 | 0 |
6 | フリーマン | 1/1/19 | 69000 | 4000 |
4 | フリーマン | 1/1/18 | 65000 | 8000 |
5 | フリーマン | 2017/01/01 | 57000 | 0 |
8 | セキュリティ | 1/1/19 | 56000 | 5000 |
7 | セキュリティ | 1/1/18 | 51000 | 7000 |
9 | セキュリティ | 1/1/16 | 44000 | 0 |