ウィンドウの指定を集約UDF関数に適用すると、指定した複数の行から成るウィンドウに対して操作できるようになります。
ANSI準拠
この文はANSI SQL:2011に準拠していますが、非ANSI Teradata拡張機能を含みます。
集約UDFの引数リストが空でも括弧が必要なのは、既存のアプリケーションとの互換性を保つためのTeradata拡張です。
ORDER BY句が存在し、ROWSまたはROWS BETWEEN句がない状況では、ANSI SQL:2011ウィンドウ集約関数はROWS UNBOUNDED PRECEDINGをデフォルトの集約グループとして使用しますが、Teradata SQLウィンドウ集約関数はROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGを使用します。
RESET WHEN句は、ANSI SQL規格に対するTeradata拡張機能です。
必要な権限
関数または関数が含まれているデータベースに対するEXECUTE FUNCTION権限が必要です。
UDT引数を取るUDF、またはUDTを返す集約UDFを呼び出すには、SYSUDTLIBデータベースまたは指定したUDTに対するUDTUSAGE権限が必要です。
構文
udf_name ( [ argument [,...]] ) window
- window
OVER ( [ partition_by_clause ] [ order_by_clause ] [ rows_clause ] )
- partition_by_clause
PARTITION BY column_reference [,...]
- order_by_clause
ORDER BY value_expression [,...] [ ASC | DESC ] [ RESET WHEN condition ]
- rows_clause
{ ROWS rows_clause_spec_1 | ROWS BETWEEN { UNBOUNDED PRECEDING AND rows_clause_spec_2 | value PRECEDING AND rows_clause_spec_2 | CURRENT ROW AND { UNBOUNDED | value} FOLLOWING } }
- rows_clause_spec_1
{ { UNBOUNDED | value } PRECEDING | CURRENT ROW }
- rows_clause_spec_2
{ UNBOUNDED FOLLOWING | value { PRECEDING | FOLLOWING } | CURRENT ROW }
構文要素
- udf_name
- ウィンドウの指定が適用される集約UDFの名前。
- argument
- 有効なSQL式。
- OVER
累計、グループ、または移動関数を計算する際に、値をグループ化、順序付け、および処理対象とする方法。
値は、PARTITION BY句およびRESET WHEN句に基づいてグループ化され、ORDER BY句に基づいてソートされ、パーティション内の集約グループに基づいて処理の対象とされます。
- PARTITION BY
column_referenceの中に、または列参照のカンマ区切りのリストで、関数の実行対象のグループを指定(複数も可)。
PARTITION BYは任意指定です。PARTITION BY句またはRESET WHEN句を指定しない場合は、FROM句から送られる結果セット全体が、単一のグループまたはパーティションとなります。
PARTITION BY句は、ウィンドウ パーティション句と呼ばれることもあります。
- ORDER BY
- value_expressionの中の、グループまたはパーティション内の値のソート順序。
- ASC
- 昇順のソート順序。デフォルトはASCです。
- DESC
- 降順のソート順序。
- RESET WHEN
順序付き分析関数の実行対象になるグループまたはパーティション。指定された条件の評価に応じて変化します。条件がTRUEと評価されると、指定されたウィンドウ パーティション内に新しい動的パーティションが作成されます。
RESET WHENは任意指定です。RESET WHEN句またはPARTITION BY句を指定しない場合は、FROM句から送られる結果セット全体が単一のパーティションになります。
RESET WHENを指定する場合は、ORDER BY句も指定する必要があります。
- condition
条件によるパーティション化を決めるために使用する条件式。RESET WHEN句の条件は、QUALIFY句の条件と適用範囲は同じですが、ネストされた順序付き分析関数はRESET WHEN句を指定できないという追加の制約があります。また、条件内のsubqueryとしてのSELECTは指定できません。
条件は、指定されたすべてのウィンドウ パーティション内の行に適用され、そのウィンドウ パーティション内にサブパーティションを作成します。
詳細については、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>のRESET WHEN、および<Teradata Vantage™ - SQLデータ操作言語、B035-1146>のQUALIFY句を参照してください。
- ROWS
パーティション内の集約グループの開始ポイント。集約グループの終了ポイントは現在行になります。
行Rの集約グループは、区分内の行の順序付けでのRに対して定義される行の集合です。
ROWSまたはROWS BETWEEN句がない場合のデフォルトの集約グループは、ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGです。
- ROWS BETWEEN
集約グループの開始と終了。これにより、現在行を基準にした行の集合を、パーティション内の行の順序付けで定義します。
グループ開始として指定される行は、グループ終了として指定される行より前になければなりません。
ROWSまたはROWS BETWEEN句がない場合のデフォルトの集約グループは、ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGです。
- UNBOUNDED PRECEDING
- 現在行より前にあるパーティション全体。
- UNBOUNDED FOLLOWING
- 現在行より後にあるパーティション全体。
- CURRENT ROW
- 現在行としての集約グループの開始または終了。
- value PRECEDING
現在行より前にある行の数。
の値は、常に正の整数リテラルです。
value PRECEDINGがグループの開始またはグループの終了になる場合、集約グループ内の行の最大数は4096です。
- value FOLLOWING
現在行より後にある行の数。
valueの値は、常に正の整数リテラルです。
value FOLLOWINGがグループの開始またはグループの終了になる場合、集約グループ内の行の最大数は4096です。