$TD_TIMECODE_RANGEは、集約結果が計算される時間の範囲を指定する仮想システム列です。そのデータ型はperiod(timestamp(6) with time zone)です。タイムコード範囲列は、('2014-01-06 09:00:00.000000+00:00', '2014-01-06 09:30:00.000000+00:00')のような時間範囲を格納できます。これはSELECT句およびORDER BY句で使用できます。
列を取得して使用するには、SELECT句またはORDER BY句に$TD_TIMECODE_RANGEを入力します。
- デフォルトのTITLEはTIMECODE_RANGEです。
- ユーザーは、AS句でデフォルト タイトルの名前を変更することができます。
- 列のデータ型は、Periodデータ型(PDT)です。
- PDT名ラベルを使用するのと同じ方法で、$TD_TIMECODE_RANGE名ラベルを使用します。
- 直接参照できます。
- PDTに関連するFUNCTIONS ... BEGIN($TD_TIMECODE_RANGE)、END($TD_TIMECODE_RANGE)のいずれかを起動できます。
- 任意の式(これを関数に渡すことを含む)で使用できます。
- 他のPDT列と同様にORDER BY句で使用できます。
$TD_TIMECODE_RANGE値
返される値はPDTの規則に従います。そのため、指定された範囲に開始時間は含まれますが、終了時間は含まれません。特定のGROUP BY TIME間隔番号に関連する範囲の開始時間は次のとおりです。
- 1つの範囲の場合: 開始時間は範囲の開始時間です。
- ORで区切られた複数の範囲の場合: 開始時間は指定されたすべての範囲の中で最も早い開始時間です。
詳細については、GROUP BY TIME - タイム ゼロ値を参照してください。
次の例では、クエリーの一部として指定された1つだけの時間範囲があります。
SELECT ... WHERE TD_TIMECODE BETWEEN TIMESTAMP ’2016-10-01 08:00:00’ AND TIMESTAMP ’2016-10-01 09:00:00’ GROUP BY TIME(MINUTES(15))
説明
- GROUP BY TIMEのタイム ゼロの値は2016-10-01 08:00:00です
- GROUP BY TIMEの間隔番号は15です
- GROUP BY TIMEの間隔期間はMINUTESです
詳細については、GROUP BY TIME - タイム ゼロ値を参照してください。
これにより、1、2、3、4という番号を持つ結果が生成されます。
GROUP BY TIME (MINUTES(15)) | TIMECODE_RANGE |
---|---|
1 | '2016-10-01 08:00:00', '2016-10-01 08:15:00' |
2 | '2016-10-01 08:15:00', '2016-10-01 08:30:00' |
3 | '2016-10-01 08:30:00', '2016-10-01 08:45:00' |
4 | '2016-10-01 08:45:00', '2016-10-01 09:00:00' |
スニペットの例では、クエリーの一部として指定された複数の時間範囲を示しています。
SELECT ... WHERE TD_TIMECODE BETWEEN TIMESTAMP ’2016-10-01 08:00:00’ AND TIMESTAMP ’2016-10-01 09:00:00’ OR TIMECODE BETWEEN TIMESTAMP ’2016-10-01 12:15:00’ AND TIMESTAMP ’2016-10-01 13:30:00’ GROUP BY TIME(MINUTES(15))
それぞれの説明は次のとおりです(複数の範囲がある場合)。
- GROUP BY TIMEのタイム ゼロの値は'2016-10-01 08:00:00'です(これが両方の範囲の中で最も早いタイム ゼロであるため)
- GROUP BY TIMEの間隔番号は15です
- GROUP BY TIMEの間隔番号の期間はMINUTESです
これにより、次の結果が生成されます。
GROUP BY TIME (MINUTES(15)) | TIMECODE_RANGE |
---|---|
1 | '2016-10-01 08:00:00', '2016-10-01 08:15:00' |
2 | '2016-10-01 08:15:00', '2016-10-01 08:30:00' |
3 | '2016-10-01 08:30:00', '2016-10-01 08:45:00' |
4 | '2016-10-01 08:45:00', '2016-10-01 09:00:00' |
18 | '2016-10-01 12:15:00', '2016-10-01 12:30:00' |
19 | '2016-10-01 12:30:00', '2016-10-01 12:45:00' |
20 | '2016-10-01 12:45:00', '2016-10-01 13:00:00' |
21 | '2016-10-01 13:00:00', '2016-10-01 13:15:00' |
22 | '2016-10-01 13:15:00', '2016-10-01 13:30:00' |
$TD_TIMECODE_RANGE値とシステム タイム ゾーン設定
$TD_TIMECODE_RANGE値は、tdlocaledefユーティリティまたは次のDBS制御フィールドで指定されたシステム タイム ゾーン設定に基づいています。
- 16. System TimeZone Hour
- 17. System TimeZone Minute
- 18. System TimeZone String
- 57. TimeDateWZControl
次のテーブル、データ、DBS制御の設定について考えてみます。
CREATE TABLE ocean_buoy (BUOYID INTEGER, SALINITY INTEGER, TEMPERATURE INTEGER) PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2012-01-01', HOURS(1), COLUMNS(BUOYID), nonsequenced); INSERT INTO ocean_buoy VALUES(TIMESTAMP '2014-01-06 08:00:00.000000', 0, 55, 10);
DBS制御フィールドのデフォルトのシステム タイム ゾーン設定:
- 16. System TimeZone Hour = 0
- 17. System TimeZone Minute = 0
- 57. TimeDateWZControl = 2
以下の問合わせを実行します。
SELECT $TD_TIMECODE_RANGE, $TD_GROUP_BY_TIME, AVG(temperature) FROM ocean_buoy GROUP BY TIME(HOURS(1)) ORDER BY 1;
返す結果:
TIMECODE_RANGE | GROUP BY TIME(HOURS(1)) | Average (TEMPERATURE) |
---|---|---|
('2014-01-06 08:00:00.000000+00:00', '2014-01-06 09:00:00.000000+00:00') | 17673 | 10 |
DBS制御フィールドの設定が次の場合:
- 16. System TimeZone Hour = 8
- 17. System TimeZone Minute = 0
- 57. TimeDateWZControl = 2
以下の問合わせを実行します。
SELECT $TD_TIMECODE_RANGE, $TD_GROUP_BY_TIME, AVG(temperature) FROM ocean_buoy GROUP BY TIME(HOURS(1)) ORDER BY 1;
返す結果:
TIMECODE_RANGE | GROUP BY TIME(HOURS(1)) | Average (TEMPERATURE) |
---|---|---|
('2014-01-06 16:00:00.000000+08:00', '2014-01-06 17:00:00.000000+08:00') | 17673 | 10 |
DBS制御フィールドの設定が次の場合:
- 16. System TimeZone Hour = 5
- 17. System TimeZone Minute = 0
- 57. TimeDateWZControl = 3
以下の問合わせを実行します。
SELECT $TD_TIMECODE_RANGE, $TD_GROUP_BY_TIME, AVG(temperature) FROM ocean_buoy GROUP BY TIME(HOURS(1)) ORDER BY 1;
返す結果:
TIMECODE_RANGE | GROUP BY TIME(HOURS(1)) | Average (TEMPERATURE) |
---|---|---|
('2014-01-06 08:00:00.000000+05:00', '2014-01-06 09:00:00.000000+05:00') | 17668 | 10 |
この例では、tdlocaledefユーティリティを使用してTimeZoneStringを"America Pacific"に設定し、次のクエリーを実行します。
SELECT $TD_TIMECODE_RANGE, $TD_GROUP_BY_TIME, AVG(temperature) FROM ocean_buoy GROUP BY TIME(HOURS(1)) ORDER BY 1;
返す結果:
TIMECODE_RANGE | GROUP BY TIME(HOURS(1)) |
---|---|
('2014-01-06 00:00:00.000000-08:00', '2014-01-06 01:00:00.000000-08:00') | 17673 |
不規則の$TD_TIMECODE_RANGE値
ある範囲のタイムバケットが、(指定された期間に基づいて)タイムバケット全体を完了しないように指定されている場合、この例に示されるように、生成される$TD_TIMECODE_RANGE値はこの不一致を反映します。
SELECT $TD_TIMECODE_RANGE, $TD_GROUP_BY_TIME, BUOYID, AVG(TEMPERATURE), COUNT(*) FROM OCEAN_BUOYS WHERE TD_TIMECODE BETWEEN TIMESTAMP '2014-01-06 08:00:00' AND TIMESTAMP '2014-01-06 08:30:00' OR TD_TIMECODE BETWEEN TIMESTAMP '2014-01-06 10:02:00' AND TIMESTAMP '2014-01-06 10:15:00' GROUP BY TIME (MINUTES(10) AND BUOYID) ORDER BY 2, 3;
結果:
TIMECODE_RANGE | GROUP BY TIME (MINUTES(10)) | BUOYID | Average (TEMPERATURE) | Count(*) |
---|---|---|---|---|
('2014-01-06 08:00:00.000000+00:00', '2014-01-06 08:10:00.000000+00:00') | 1 | 0 | 54 | 3 |
('2014-01-06 08:10:00.000000+00:00', '2014-01-06 08:20:00.000000+00:00') | 2 | 0 | 55 | 2 |
('2014-01-06 10:02:00.000000+00:00', '2014-01-06 10:10:00.000000+00:00') | 13 | 44 | 54.25 | 4 |
('2014-01-06 10:10:00.000000+00:00', '2014-01-06 10:15:00.000000+00:00') | 14 | 44 | 43 | 1 |