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

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vjt1596846980081.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

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

まず、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