SEQUENCED VALIDTIME PERIOD '(2009-01-01, 2009-12-31)' SELECT Policy_ID, Customer_ID, Validity FROM ( SEQUENCED VALIDTIME SELECT Policy.*, Validity FROM Policy) AS my_derived_table; Policy_ID Customer_ID Validity VALIDTIME ----------- ----------- ----------------------- ------------------------ 541077 766492008 ('09/12/21', '99/12/31') ('09/12/21', '09/12/31') 541008 246824626 ('09/10/01', '99/12/31') ('09/10/01', '09/12/31') 541145 616035020 ('09/12/03', '10/12/01') ('09/12/03', '09/12/31')
ValidityとVALIDTIMEの比較によって、結果セットのvalid-time期間が、PolicyテーブルのValidity列のvalid-time期間とsequenced select文に指定したPAとの共通部分であることが証明されます。
この例では、SELECT *アスタリスク表記をテンポラル列の明示的な指定と組み合わせて使用します。アスタリスクの詳細については、選択リストのアスタリスクを参照してください。
SELECT文のWHEREなどの句では、新しいVALIDTIME列を参照できません。また、VALIDTIMEをその他の射影された列の別名として使用することはできません。
ビューや派生テーブルが結果としてvalid-timeテーブルになる場合、そのテーブルは問合わせに指定したその他のvalid-timeテーブルと同様に扱われます。それ以外の場合は、非テンポラル テーブルとして扱われます。
sequenced形式のテンポラル問合わせは、単一のvalid-timeテーブルからの単純SELECT、または複数のテーブルからの内部結合を使用した単純SELECTに制限されています。テンポラル問合わせには、非相関スカラーsubquery が使用できます。
- 外部結合
- 集合演算
- 順序付き分析関数
- 非相関スカラーsubquery 以外のsubquery
- WITH, WITH RECURSIVE, TOP n, DISTINCT
- sequenced内部結合のコンテキストで言及されている行または行という用語は、有効期間が問合わせの適用期間と重複し、指定された単一テーブル条件を満たすテーブルのすべての行を意味します。
- 結合された行には、指定した順序の射影された列に加え、適用期間、左の行の有効期間、および右の行の有効期間の交差の結果が設定された値を持つvalid-time列が格納されます。
- 結合に関与する各テーブルのvalid-time列と適用期間の粒度が同じ場合には、結果としての有効期間の粒度は適用期間の粒度と同じになります。それ以外の場合は、結果の有効期間の粒度がそれらの中で最も高い粒度になり、結合を実行する前に各valid-time列は暗黙的に最も高いvalid-time粒度に変換されます。
たとえば、適用期間がPERIOD(DATE)のsequenced結合、PERIOD(TIMESTAMP(3))のvalid-time列を含むテーブル、およびPERIOD(TIMESTAMP(5))のvalid-time列を含むテーブルについて考えてみます。この結果としてのVALIDTIME列のデータ型はPERIOD(TIMESTAMP(5))になります。
通常、粒度が異なっても問題は発生しません。ただし、いくつかのタイプの射影列では、混乱が発生する可能性があります。例えば、元のテーブルで1日ごとのチャージを表現する列が、時間単位の有効性を持つ結果に射影されている場合などに、混乱が発生する可能性があります。そのような状況は、粒度が似ているテーブルを結合したり、データ モデルで結合対象のテーブルに同じ粒度を指定しておいたりすると回避できます。
同様に、非テンポラル テーブルがテンポラル テーブルと結合する場合、結果の行はテンポラル テーブルの有効性を反映します。この有効性は、元来はテンポラルの性質を持たないデータに適用された場合、誤解を生む可能性があります。
- sequenced内部結合では、行の有効期間が重なるときにのみ、左の行が右のテーブルの一致する行と結合されます。
ORDER BY句を指定したsequenced問合わせでは、結果のVALIDTIME列の順序付けを指定できます。この列をORDER BY句に指定するには、VALIDTIMEキーワードを使用するか、その列の名前を二重引用符で区切って("VALIDTIME")使用します。順序付け句でVALIDTIMEを指定しないと、結果のVALIDTIME列は、デフォルトのASC (昇順)順序付けのリストの最後の構成要素として、自動的にORDER BYリストに組み込まれます。