窗口框架
分析函数的窗口框架由一组与函数当前正在评估的行相对的行组成。分析函数处理此行及其窗口框架之后,Vertica 会将当前行向前移动,并相应地调整框架边界。如果 OVER 子句还指定了分区,Vertica 也会检查框架边界是否跨越了分区边界。此过程将不断重复,直到函数评估了最后一个分区的最后一个行。
指定窗口框架
您可以在分析函数的 OVER 子句中指定窗口框架,如下所示。
{ ROWS | RANGE } { BETWEEN start‑point AND end‑point } | start‑point
start-point / end‑point:
{ UNBOUNDED {PRECEDING | FOLLOWING}
| CURRENT ROW
| constant-value {PRECEDING | FOLLOWING}}
start‑point 和 end‑point 指定相对于当前行的窗口框架偏移。ROWS 和 RANGE 关键字指定偏移是物理偏移还是逻辑偏移。如果仅指定起始点,Vertica 将创建一个从此点到当前行的窗口。
有关语法的详细信息,请参阅窗口框架子句。
要求
要指定窗口框架,OVER 还必须指定窗口顺序 (ORDER BY) 子句。如果 OVER 子句包含窗口顺序子句,但没有指定窗口框架,则函数会创建从当前分区的第一行扩展到当前行的默认框架。它等同于以下子句:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
窗口聚合函数
支持窗口框架的分析函数称为窗口聚合函数。它们返回移动平均数和累计结果等信息。要将以下函数用作窗口(分析)聚合函数,而不是基本聚合函数,OVER 子句必须指定窗口顺序子句和(可选)窗口框架子句。如果 OVER 子句没有指定窗口框架,则函数将如前所述创建默认窗口框架。
以下分析函数支持窗口框架:
注意
FIRST_VALUE 和 LAST_VALUE 函数也支持窗口框架,但它们仅仅是分析函数,不具有聚合功能。EXPONENTIAL_MOVING_AVERAGE、LAG 和 LEAD 分析函数不支持窗口框架。包含空 OVER 子句的窗口聚合函数不会创建窗口框架。如果所有输入都视为一个分区,则函数将用作报告函数。