16.20 - 例: 時系列データでRANK(ANSI)の使用 - Teradata Vantage NewSQL Engine

Teradata Vantage™ 時系列テーブルおよび操作

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

次の例は、RANK(ANSI)を使用して、時系列全体で特定のタイムバケットの平均をランク付けする方法を示しています。

この例では、時系列集約のテーブルとデータ定義の例のテーブルとデータ設定を使用します。

RANK(ANSI)を使用する前に、AVGを実行します。AVG関数は、プライマリ タイム インデックス(PTI)と非PTIテーブルの両方で使用できます。次の例では、時系列データから平均を取得します。

/*PTI Table*/
SELECT $TD_TIMECODE_RANGE, $TD_GROUP_BY_TIME, BUOYID, AVG(TEMPERATURE)
FROM OCEAN_BUOYS
WHERE TD_TIMECODE BETWEEN TIMESTAMP '2014-01-06 08:00:00' AND TIMESTAMP '2014-01-06 10:30:00' AND BUOYID=0
GROUP BY TIME (MINUTES(10) AND BUOYID)
ORDER BY 1,2,3; 

/*Non-PTI Table*/
SELECT $TD_TIMECODE_RANGE, $TD_GROUP_BY_TIME, BUOYID, AVG(TEMPERATURE)
FROM OCEAN_BUOYS_NONPTI
WHERE TIMECODE BETWEEN TIMESTAMP '2014-01-06 08:00:00' AND TIMESTAMP '2014-01-06 10:30:00'
GROUP BY TIME (MINUTES(10) AND BUOYID)
USING TIMECODE(TIMECODE)
ORDER BY 1,2,3;

結果:

両方のクエリーの結果は同じであるため、1つの結果セットだけが表示されます。
TIMECODE_RANGE GROUP BY TIME (MINUTES(10)) BUOYID AVG (TEMPERATURE)
('2014-01-06 08:00:00.000000+00:00', '2014-01-06 08:10:00.000000+00:00') 1 0 54
('2014-01-06 08:10:00.000000+00:00', '2014-01-06 08:20:00.000000+00:00') 2 0 55
('2014-01-06 09:00:00.000000+00:00', '2014-01-06 09:10:00.000000+00:00' 7 1 74
('2014-01-06 10:00:00.000000+00:00', '2014-01-06 10:10:00.000000+00:00') 13 14 50
('2014-01-06 10:10:00.000000+00:00', '2014-01-06 10:20:00.000000+00:00') 14 14 43

RANK(ANSI)を使用して、各時系列の平均をランク付けします。

/*PTI Table*/
SEL TIMECODE_RANGE, TBN, BUOYID, AVG_TEMPERATURE, RANK() OVER (PARTITION BY BUOYID ORDER BY AVG_TEMPERATURE) FROM ( 
    SELECT $TD_TIMECODE_RANGE as TIMECODE_RANGE, $TD_GROUP_BY_TIME as TBN, BUOYID, AVG(TEMPERATURE) AS AVG_TEMPERATURE 
    FROM OCEAN_BUOYS 
    WHERE TD_TIMECODE BETWEEN TIMESTAMP '2014-01-06 08:00:00' AND TIMESTAMP '2014-01-06 10:30:00'
    GROUP BY TIME (MINUTES(10) AND BUOYID) 
) AS NESTED_AVG_TABLE 
ORDER BY 3,5;

/*Non-PTI Table*/
SEL TIMECODE_RANGE, TBN, BUOYID, AVG_TEMPERATURE, RANK() OVER (PARTITION BY BUOYID ORDER BY AVG_TEMPERATURE) FROM ( 
    SELECT $TD_TIMECODE_RANGE as TIMECODE_RANGE, $TD_GROUP_BY_TIME as TBN, BUOYID, AVG(TEMPERATURE) AS AVG_TEMPERATURE 
    FROM OCEAN_BUOYS_NONPTI
    WHERE TIMECODE BETWEEN TIMESTAMP '2014-01-06 08:00:00' AND TIMESTAMP '2014-01-06 10:30:00'
    GROUP BY TIME (MINUTES(10) AND BUOYID) 
    USING TIMECODE(TIMECODE)
) AS NESTED_AVG_TABLE 
ORDER BY 3,5;

結果:

両方のクエリーの結果は同じであるため、1つの結果セットだけが表示されます。
TIMECODE_RANGE TBN BUOYID AVG (TEMPERATURE) RANK
('2014-01-06 08:00:00.000000+00:00', '2014-01-06 08:10:00.000000+00:00') 1 0 54 1
('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 09:00:00.000000+00:00', '2014-01-06 09:10:00.000000+00:00') 7 1 74 1
('2014-01-06 10:10:00.000000+00:00', '2014-01-06 10:20:00.000000+00:00') 13 44 43 1
('2014-01-06 10:00:00.000000+00:00', '2014-01-06 10:10:00.000000+00:00') 13 44 50 2