窗口框架子句

指定窗口框架,其中包含一组与分析函数当前正在评估的行相对的行。函数处理此行及其窗口之后,Vertica 会将当前行向前移动,并相应地调整窗口边界。如果 OVER 子句还指定了分区,Vertica 也会检查窗口边界是否跨越了分区边界。此过程将不断重复,直到函数评估了最后一个分区的最后一个行。

语法

{ ROWS | RANGE } { BETWEEN start‑point AND end‑point } | start‑point

start-point / end‑point

{ UNBOUNDED {PRECEDING | FOLLOWING}
  | CURRENT ROW
  | constant-value  {PRECEDING | FOLLOWING}}

参数

ROWS | RANGE
指定 Vertica 是否确定窗口框架大小为当前行的物理或逻辑偏移。有关详细信息,请参阅下方的 ROWS 与 RANGE
BETWEEN start‑point AND end‑point
指定窗口的第一个行和最后一个行,其中 start‑pointend‑point 可以是以下之一(下文将详细讨论):
  • UNBOUNDED {PRECEDING | FOLLOWING}

  • CURRENT ROW

  • constant-value {PRECEDING | FOLLOWING}

start-point 必须解析为小于或等于 end-point 的行或值。

UNBOUNDED PRECEDING
指定窗口框架扩展到当前分区的第一行。
start‑point
如果 ROWSRANGE 仅指定了一个起点,Vertica 将使用当前行作为终点,并相应地创建窗口框架。在这种情况下,start-point 必须解析为小于或等于当前行的行。
UNBOUNDED FOLLOWING
指定窗口框架扩展到当前分区的最后一行。
CURRENT ROW
指定当前行或值为窗口的起点或终点。
constant‑value {PRECEDING | FOLLOWING}
指定常数值或评估为常数值的表达式。此值指定当前行的物理便宜或逻辑偏移,具体视您是否指定了 ROWSRANGE 而定。

其他依赖项也适用,具体视您是否指定了 ROWSRANGE 而定。有关详细信息,请参阅下方的 ROWS 与 RANGE

要求

要指定窗口框架,OVER 还必须指定窗口顺序 (ORDER BY) 子句。如果 OVER 子句没有指定窗口框架,则函数会创建从当前分区的当前行扩展到第一行的默认窗口。它等同于以下子句:

RANGE UNBOUNDED PRECEDING AND CURRENT ROW

ROWS 与 RANGE

当前行的窗口框架偏移可能是物理或逻辑偏移:

  • ROWS 将窗口的 start‑pointend‑point 指定为相对于当前行的行数。如果 start-pointend-point 以常数值表示,则该值的计算结果必须为正整数。

  • RANGE 将窗口指定为逻辑偏移,比如时间。范围值必须与窗口顺序 (ORDER BY) 子句数据类型匹配:NUMERIC、DATE/TIME、FLOAT 或 INTEGER。

使用 ROWSRANGE 对于将窗口起点和终点设置为常数值实施了特定要求:

为 ROWS 设置常数值
常数的计算结果必须为正 INTEGER。
为 RANGE 设置常数值
需要满足以下要求:

  • 常数的计算结果必须为正数值或 INTERVAL 字面量。

  • 如果常数的计算结果为 NUMERIC 值,则 ORDER BY 列类型必须为 NUMERIC 数据类型。

  • 如果常数的计算结果为 INTERVAL DAY TO SECOND 子类,则 ORDER BY 列类型必须为以下之一:TIMESTAMP、TIME、DATE 或 INTERVAL DAY TO SECOND。

  • 如果常数的计算结果为 INTERVAL YEAR TO MONTH,则 ORDER BY 列类型必须为以下之一:TIMESTAMP、DATE 或 INTERVAL YEAR TO MONTH。

  • 窗口顺序子句只可指定一个表达式。

示例

请参阅窗口框架