DB2 Version 10.1 for Linux, UNIX, and Windows

システム期間テンポラル・データの照会

システム期間テンポラル表を照会すると、指定した時点または期間の結果を返すことができます。 これらの結果には、現行値とそれまでの履歴値が含まれる場合があります。

このタスクについて

システム期間テンポラル表を照会するとき、FROM 節に FOR SYSTEM_TIME を含めることができます。 FOR SYSTEM_TIME の指定を使用すると、データの現在と過去の状態を照会できます。 期間は以下のように指定します。
AS OF value1
期間の開始値が value1 以下で、期間の終了値が value1 より大きいすべての行が含まれます。これを使用すると、特定の時点のデータを照会できます。
FROM value1 TO value2
行において指定された期間の開始列の値が value2 より小さく、かつ、行において指定された期間の終了列の値が value1 より大きい行が、すべて含まれます。 value1value2 以上である場合、行は返されません。
BETWEEN value1 AND value2
期間の一部が value1value2 の間のいずれかの時点とオーバーラップするすべての行が含まれます。 期間の開始値が value2 以下で、期間の終了値が value1 より大きい場合、行が返されます。
サンプル照会については、以下のセクションを参照してください。

手順

システム期間テンポラル表を照会するには、SELECT ステートメントを使用します。 例えば、以下の照会はそれぞれ、システム期間テンポラル表のデータの削除のトピックの結果表にある保険証書情報を要求します。 照会ごとに異なる FOR SYSTEM_TIME 指定を使用しています。

policy_info 表とそれに関連する履歴表は、以下のとおりです。
表 1. システム期間テンポラル表: policy_info
policy_id coverage sys_start sys_end ts_id
A123 12000 2010-01-31-
22.31.33.
495925000000
9999-12-30-
00.00.00.
000000000000
2010-01-31-
22.31.33.
495925000000
C567 25000 2011-02-28-
09.10.12.
649592000000
9999-12-30-
00.00.00.
000000000000
2011-02-28-
09.10.12.
649592000000
表 2. 履歴表: hist_policy_info
policy_id coverage sys_start sys_end ts_id
C567 20000 2010-01-31-
22.31.33.
495925000000
2011-02-28-
09.10.12.
649592000000
2010-01-31-
22.31.33.
495925000000
B345 18000 2010-01-31-
22.31.33.
495925000000
2011-09-01-
12.18.22.
959254000000
2010-01-31-
22.31.33.
495925000000

その他の例

このセクションでは、システム期間テンポラル表の他の照会例を示します。
他の有効な日付値またはタイム・スタンプ値を使用する照会
policy_info 表が作成され、その時刻関連の列は TIMESTAMP(12) として宣言されているため、他の有効な日付値またはタイム・スタンプ値を使用する照会は、TIMESTAMP(12) を使用するように変換されてから実行されます。 例えば、
SELECT policy_id, coverage
   FROM policy_info
   FOR SYSTEM_TIME AS OF '2011-02-28'
これは、以下のように変換されて実行されます。
SELECT policy_id, coverage
   FROM policy_info
   FOR SYSTEM_TIME AS OF '2011-02-28-00.00.00.000000000000'
ビューの照会
あたかもシステム期間テンポラル表であるかのように、ビューを照会できます。 ビュー参照の後に FOR SYSTEM_TIME 指定を指定できます。
CREATE VIEW policy_2011(policy, start_date)
   AS SELECT policy_id, sys_start FROM policy_info;

SELECT * FROM policy_2011 FOR SYSTEM_TIME BETWEEN
   '2011-01-01-00.00.00.000000' AND '2011-12-31-23.59.59.999999999999';
ビュー policy_2011 に対する SELECT は、policy_info 表と hist_policy_info 表の両方を照会します。 返されるのは、2011 年のいずれかの時点でアクティブであったすべての保険証書です。これには保険証書が開始された日付が含まれます。
A123, 2010-01-31-22.31.33.495925000000
C567, 2011-02-28-09.10.12.649592000000
C567, 2010-01-31-22.31.33.495925000000
B345, 2010-01-31-22.31.33.495925000000
ビュー定義に期間指定が含まれる場合は、ビューに対する照会に期間指定を含めることはできません。 以下のステートメントは、期間指定が複数あるためにエラーを返します。
CREATE VIEW all_policies AS SELECT * FROM policy_info;
   FOR SYSTEM_TIME AS OF '2011-02-28-09.10.12.649592000000';

SELECT * FROM all_policies FOR SYSTEM_TIME BETWEEN
   '2011-01-01-00.00.00.000000' AND '2011-12-31-23.59.59.999999999999';