16.20 - FROM 句 (ANSI Valid-Timeテーブル フォーム) - Teradata Vantage NewSQL Engine

Teradata Vantage™ ANSIテンポラル テーブル サポート

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1186-162K-JPN

目的

system-time次元基準を使用して、SELECT問合わせの対象となるANSI valid-timeテーブルの行を決めます。

構文



valid_time_table
問合わせ対象のvalid-timeテーブル。
AS OF
指定された時点を含むvalid-time期間のvalid-timeテーブルの行を修飾します。つまり、行内の情報は指定された時点で有効な現在、過去、または将来の情報になります。
返される行は、問合わせで指定された時点では有効ですが、問合わせの送信時点では有効でない可能性があります。
point_in_time
point_in_time_1
poine_in_time_2
有効時間内の点を指定するか、行が返される有効時間内の期間を区切ります。
日付またはタイムスタンプ式(DATEまたはTIMESTAMP[(n)] [WITH TIME ZONE]値で評価される定数、スカラーUDF、スカラー副問合わせ、またはビジネス カレンダ関数など)。
この式は、パラメータ化された値およびCURRENT_DATE、CURRENT_TIMESTAMP、TEMPORAL_DATE、またはTEMPORAL TIMESTAMPなどのビルトイン関数を含めた任意の式にすることができます。この式は列を参照することはできませんが、自己格納型の非相関スカラー副問合わせにすることができます。
BETWEEN ... AND
point_in_time_1point_in_time_2で定義される期間と重なる、またはこれらの期間が直後に続くvalid-time期間を持つすべての行を修飾します。
これは、一般に理解されている意味での「between(間)」ではありません。BETWEENはpoint_in_time_1の時点より前に始まるvalid-time期間の行、およびpoint_in_time_2時点の直後に始まり、それを超える行を修飾するからです。一般に理解されているBETWEENの意味を反映する修飾子としては、CONTAINED IN修飾子を使用します。
FROM ... TO
point_in_time_1point_in_time_2で定義される期間と重なるvalid-time期間を持つすべての行を修飾します。
CONTAINED IN
point_in_time_1point_in_time_2の間のvalid-time期間を持つすべての行を修飾します。point_in_time_1以降に始まり、point_in_time_2以前に終わるvalid-time期間。
CONTAINED INは、ANSIに対するTeradata Databaseの拡張機能です。

ANSI準拠

この文は、ANSI SQL:2011規格に対するTeradata拡張機能です。

ANSIでは、AS OF、BETWEEN ... AND、FROM ... TOテンポラル修飾子はvalid-timeテーブルの問合わせでサポートされていません。

使用上の注意

  • FROM句でテンポラル修飾子を使用しない場合、valid-timeテーブルのデフォルトでは有効性に関係なく、テーブル内のすべての行を修飾します。
  • FROM句でテンポラル修飾子を使用する場合、結果でvalid-time開始列と終了列が返されません。
  • BETWEEN ... AND、FROM ...TO、およびCONTAINED INはすべて期間に従って、テンポラル テーブルの問合わせを修飾します。指定期間中(またはBETWEEN ... ANDの場合、指定期間の直後)の任意の時点で有効だった任意のテーブルの行が問合わせ用に修飾されます。3つのテンポラル修飾子の違いはわずかですが、行の正確なセットを修飾する問合わせを定義できます。

FROM句の例

valid-timeテーブルでテンポラル修飾子のない簡単なSELECTではvalid-time期間に関わらずテーブル内のすべての行が表示されます。このvalid-timeテーブルにjob_startからjob_endまでの期間を表わすvalid-time派生期間job_durがあるとします。

SELECT * FROM employee_systime;

 eid ename terms  job_start     job_end
---- ----- ----- ---------- -----------
1002 Ash    TA05 2003/01/01  2003/12/31
1005 Alice  TW11 2004/12/01  2005/12/01
1010 Mike   TW07 2015/01/01  2016/12/31
1005 Alice  PW11 2005/12/01  9999/12/31
1001 Sania  TW08 2002/01/01  2006/12/31
1004 Fred   PW12 2001/05/01  9999/12/31
1003 SRK    TM02 2004/02/10  2005/02/09


job_end日付が9999-12-31の行は無制限に有効です。

2005年12月1日に変更されたAliceのジョブ契約の期間を示すAliceの重複する日付のない2つの行に注意してください。1つの行は、2005年12月1日に終わり、もう1つの行が2005年12月1日に始まっているのにも関わらず、行は「重なりません」。job_start行とjob_end行から派生する真の期間は開始境界を含み、終了境界を除外するとみなされるからです。

テンポラル修飾子を使用すれば、現在、過去、将来の指定した任意の時点や期間に有効な行を修飾できます。

例: ANSI Valid-TimeテーブルでのAS OF問合わせ

次のAS OF問合わせでは、2002年1月1日に有効であったテーブルのすべての行が取得されます。

SELECT * 
FROM employee_vt 
FOR VALIDTIME AS OF DATE’2002-01-01’;

 eid ename terms  job_start     job_end
---- ----- ----- ---------- -----------
1001 Sania  TW08 2002/01/01  2006/12/31
1004 Fred   PW12 2001/05/01  9999/12/31

2002年1月1日を含むvalid-time期間のジョブを持っていたのは、SaniaとFredだけです。

テンポラル問合わせでは、将来の時点に有効になる、または将来の時点でも有効な行を返す将来の時間を指定できます。

SELECT * 
FROM employee_vt 
FOR VALIDTIME AS OF DATE’2015-02-01’;

 eid ename terms  job_start     job_end
---- ----- ----- ---------- -----------
1005 Alice  PW11 2005/12/01  9999/12/31
1010 Mike   TW07 2015/01/01  2016/12/31
1004 Fred   PW12 2001/05/01  9999/12/31

例: ANSI Valid-TimeテーブルでのCONTAINED IN問合わせ

CONTAINED IN問合わせでは、指定された期間内にのみ有効であった行が返されます。指定された期間内に始まっても、期間を超えて継続されるvalid-time期間の行は、返されません。

SELECT * 
FROM employee_vt 
FOR VALIDTIME CONTAINED IN (DATE’2004-01-01’,DATE’2005-12-31’);

 eid ename terms  job_start     job_end
---- ----- ----- ---------- -----------
1005 Alice  TW11 2004/12/01  2005/12/01
1003 SRK    TM02 2004/02/10  2005/02/09


例: ANSI valid-timeテーブルでのFROM ...TO問合わせ

この問合わせでは、CONTAINED INの例と同じ期間を指定しますが、FROM ... TO修飾子の場合、指定された期間が重なるvalid-time期間の行が返されます。

SELECT *
FROM employee_vt
FOR VALIDTIME FROM DATE’2004-01-01’ TO DATE’2005-12-31’;

 eid ename terms  job_start     job_end
---- ----- ----- ---------- -----------
1005 Alice  TW11 2004/12/01  2005/12/01
1004 Fred   PW12 2001/05/01  9999/12/31
1005 Alice  PW11 2005/12/01  9999/12/31
1003 SRK    TM02 2004/02/10  2005/02/09
1001 Sania  TW08 2002/01/01  2006/12/31