17.05 - 例: アンカー間隔に対するEXPAND ON - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-175K-JPN
Language
日本語 (日本)

この例では、アンカー ピリオド拡張およびアンカー ポイント拡張を行なうための、アンカー間隔の使用方法を示します。アンカー ピリオド拡張の場合、拡張された期間値は拡張中の期間とオーバーラップする必要がありますが、アンカー ポイント拡張の場合は、拡張された期間値の開始値は、拡張中の期間内に含まれている必要があり、より制限の厳しい条件になっています。

まず、sold_productsテーブルを作成します。

     CREATE SET TABLE sold_products, NO FALLBACK  (
       product_id       INTEGER,
       product_price    DECIMAL(10,2),
       product_duration PERIOD(DATE))
     PRIMARY INDEX (product_id);

sold_productsテーブルには、次の行が含まれます。

product_id product_price product_duration
1000 100.00 2007-02-15, 2007-08-11
1001 99.99 2007-03-04, 2007-05-01

次のSELECT文では、MONTH_BEGINのアンカー ピリオドを指定します。これはアンカー ピリオド拡張です。

     SELECT product_id, product_price, product_duration, expd
     FROM sold_products
     EXPAND ON product_duration AS expd BY ANCHOR PERIOD MONTH_BEGIN;

文が以下の9つの行を返します。元の2つの行は赤色で強調表示されています。

product_id product_price product_duration expd
1000 100.00 2007-02-15,2007-08-11 2007-02-01,2007-03-01
1000 100.00 2007-02-15,2007-08-11 2007-03-01,2007-04-01
1000 100.00 2007-02-15,2007-08-11 2007-04-01,2007-05-01
1000 100.00 2007-02-15,2007-08-11 2007-05-01,2007-06-01
1000 100.00 2007-02-15,2007-08-11 2007-06-01,2007-07-01
1000 100.00 2007-02-15,2007-08-11 2007-07-01,2007-08-01
1000 100.00 2007-02-15,2007-08-11 2007-08-01,2007-09-01
1001 99.99 2007-03-04,2007-05-01 2007-03-01,2007-04-01
1001 99.99 2007-03-04,2007-05-01 2007-04-01,2007-05-01

同じデータに対して行なわれたアンカー ポイント拡張の場合は、以下の例が示すように、影の付いた行は表示されません。

次のテーブルでは、アンカー ポイントとアンカー ピリオド拡張の相違について説明します。

拡張タイプ 説明
Anchor Period Expansion(アンカー期間展開) 拡張された期間値は、拡張中の期間とオーバーラップする必要があります。
Anchor Point Expansion(アンカー時点展開) 拡張された期間値の開始値は、拡張中の期間内に含まれている必要があります。

以下のSELECT文を実行します。これは、単純に列名を指定する代わりに、product_durationにBEGIN境界機能を指定している点が、前の文とは異なります。これは、前のアンカー ピリオド拡張と同じデータに対して行なうアンカー ポイント拡張です。

     SELECT product_id, product_price, product_duration, BEGIN(expd)
     FROM sold_products
     EXPAND ON product_duration AS expd BY ANCHOR MONTH_BEGIN;

この文からは9行ではなく7行返されます。赤い影付きの行は、前の例の行で、結果セットには表示されません。

product_id product_price product_duration begin(expd)
1000 100.00 2007-02-15,2007-08-11 2007-03-01
1000 100.00 2007-02-15,2007-08-11 2007-04-01
1000 100.00 2007-02-15,2007-08-11 2007-05-01
1000 100.00 2007-02-15,2007-08-11 2007-06-01
1000 100.00 2007-02-15,2007-08-11 2007-07-01
1000 100.00 2007-02-15,2007-08-11 2007-08-01
1001 99.99 2007-03-04,2007-05-01 2007-04-01