例: ウィンドウを使用した有効期限の計算
あなたは自分の担当顧客2社の財務プランに関する情報を持つ銀行家です。各プランに、開始日が関連付けられています。
各顧客のために、次のプランの有効化日付に基づいて、現在のプランの有効期限を知りたいとします。前のプランは新しいプランの開始時に終了するため、前のプランの終了日は、次のプランの開始日マイナス1日です。
次の表に、顧客コード、関連プランコード、各プランの開始日を示します。
CustomerCode | PlanCode | StartDate |
---|
C1 | 00001 | 2014-10-01 |
C2 | 00002 | 2014-10-01 |
C2 | 00002 | 2014-11-01 |
C1 | 00004 | 2014-10-25 |
C1 | 00001 | 2014-09-01 |
C1 | 00003 | 2014-10-10 |
|
有効期限を計算するには、次のタスクを実行します。
- 1パーティションキーおよびオーダーキーを定義します。
次のウィンドウプロパティを設定して、データを顧客コードでパーティション化し、データを開始日の昇順に並べます。
プロパティ | 値 | 説明 |
---|
フレーム | 指定されていません。 | LEAD関数は、オフセット引数に基づいて行にアクセスし、フレームを無視します。 |
パーティションキー | CustomerCode。 | 行を顧客コード別にグループ化し、計算が個々の顧客に基づくようにします。 |
オーダーキー | StartDate昇順。 | 開始日の昇順で、データを時系列に配置します。 |
次の表に、顧客コードでグループ化された開始日順のデータを示します。
CustomerCode | PlanCode | StartDate |
---|
C1 | 00001 | 2014-09-01 |
C1 | 00002 | 2014-10-01 |
C1 | 00003 | 2014-10-10 |
C1 | 00004 | 2014-10-25 |
C2 | 00001 | 2014-10-01 |
C2 | 00002 | 2014-11-01 |
|
- 2ウィンドウ関数の定義
入力ごとに次の行にアクセスするLEAD関数を定義します。
次の計算を実行する式フィールドを設定します。
LEAD ( StartDate, 1, '01-Jan-2100' )
LEAD関数の詳細については、『関数リファレンス』を参照してください。
- 3ADD_TO_DATE関数の定義
アクセスした日付から1日を除算するADD_TO_DATE関数を使用します。
次の計算を実行する式フィールドを設定します。
ADD_TO_DATE ( LEAD ( StartDate, 1, '01-Jan-2100' ), 'DD', -1, )
次のプランの開始日から1日を除算することで、現在のプランの終了日がわかります。
次の表に、各プランの終了日を示します。
CustomerCode | PlanCode | StartDate | EndDate |
---|
C1 | 00001 | 2014-09-01 | 2014-09-30 |
C1 | 00002 | 2014-10-01 | 2014-10-09 |
C1 | 00003 | 2014-10-10 | 2014-10-24 |
C1 | 00004 | 2014-10-25 | 2099-12-31* |
C2 | 00001 | 2014-10-01 | 2014-10-31 |
C2 | 00002 | 2014-11-01 | 2099-12-31* |
|
*LEAD関数は、これらのプランがまだ終了していないために、デフォルト値を返しました。これらの行はパーティション外であるため、ADD_TO_DATE関数は01-Jan-2100から1日を除算し、2099-12-31を返しました。