1. ホーム
  2. sql

[解決済み] ROWS UNBOUNDED PRECEDINGはTeradataで何に使うのですか?

2022-02-09 20:14:19

質問内容

Teradataを使い始めたばかりですが、Teradataで"Rows unbounded preceding"という順序付き分析関数に出会いました。この関数について学ぶためにいくつかのサイトを試してみましたが、どのサイトも同じように複雑な例を使って説明しています。 基本的なことを理解するために、簡単な例を提供していただけないでしょうか。

どのように解決するのですか?

これは、標準SQLの一部であり、Teradataを含む多くのデータベースで実装されているウィンドウ関数の "frame" または "range" 節のことである。

簡単な例では、3日間という枠の中の平均額を計算することができます。この例ではPostgreSQLの構文を使っていますが、Teradataでも同じでしょう。

WITH data (t, a) AS (
  VALUES(1, 1),
        (2, 5),
        (3, 3),
        (4, 5),
        (5, 4),
        (6, 11)
)
SELECT t, a, avg(a) OVER (ORDER BY t ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
FROM data
ORDER BY t

...という結果になります。

t  a  avg
----------
1  1  3.00
2  5  3.00
3  3  4.33
4  5  4.00
5  4  6.67
6 11  7.50

ご覧のように、各平均値は計算されます "オーバー"。 前の行との間の範囲からなる順序付きフレーム( 1 preceding )とそれに続く行( 1 following ).

を書くと ROWS UNBOUNDED PRECEDING であれば、フレームの下限は単純に無限大となる。合計を計算するときに便利です(例. ランニング・トータル" )などになります。

WITH data (t, a) AS (
  VALUES(1, 1),
        (2, 5),
        (3, 3),
        (4, 5),
        (5, 4),
        (6, 11)
)
SELECT t, a, sum(a) OVER (ORDER BY t ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM data
ORDER BY t

くっぷく

t  a  sum
---------
1  1    1
2  5    6
3  3    9
4  5   14
5  4   18
6 11   29

SQLのウィンドウ関数については、次のような説明もあります。 .