ByteHouse 支持窗口函数的标准语法。下面解释了与窗口相关的功能列表。
特性 | 状态 |
---|---|
ROWS mode | 支持 |
RANGE mode | 支持 (默认) |
GROUPS mode | 支持 |
Expressions involving window function like: | 支持 |
Use of aggregate functions in window | 支持 |
Navigations functions: | 支持rank, dense_rank, percent_rank, cume_dist, ntile, nth_value, row_number, lagInFrame, leadInFrame, nonNegativeDerivative, lag, lead, first_value, last_value |
Window alias like: | 支持 |
返回当前分区内行的编号。行从1开始编号,按照窗口定义中的 ORDER BY 子句的顺序排列,如果没有 ORDER BY 子句,则按任意顺序排列。
返回每组中第一个同级行的编号,当前行的排名会有间隔。如果没有 ORDER BY 子句,则所有行都被视为同级行,此函数总是返回 1。
返回当前行在其分区内的同级组的编号,排名没有间隔。行从1开始编号,按照窗口定义中的 ORDER BY 子句的顺序排列。如果没有 ORDER BY 子句,则所有行都被视为同级行,此函数总是返回 1。
尽管名字如此,此函数总是返回介于 0.0 和 1.0 之间的值,计算公式为 (rank - 1)/(partition-rows - 1),其中 rank 是内置窗口函数 rank() 返回的值,partition-rows 是分区中的总行数。如果分区中只有一行,此函数返回 0.0。
累积分布。计算公式为 row-number/partition-rows,其中 row-number 是 row_number() 函数为组中最后一个同级行返回的值,partition-rows 是分区中的行数。
参数 N 被视为整数。此函数将分区尽可能均匀地分成 N 组,并按 ORDER BY 子句定义的顺序分配一个介于 1 和 N 之间的整数给每组,否则按任意顺序分配。如果有必要,较大的组会先出现。此函数返回当前行所属组的整数值。
lag() 函数的第一种形式返回在分区中上一行计算表达式 expr 的结果。或者,如果没有上一行(因为当前行是第一行),则返回 NULL。
如果提供了 offset 参数,则它必须是非负整数。在这种情况下,返回的值是分区中当前行之前 offset 行计算表达式 expr 的结果。如果 offset 为 0,则对当前行计算 expr。如果当前行之前没有 offset 行,则返回 NULL。
如果还提供了 default 参数,则如果 offset 指定的行不存在,返回 default 而不是 NULL。
对比lagInFrame, lag函数下用户提供的Frame定义被忽略,使用默认的rows between unbounded preceding and unbounded following
lead() 函数的第一种形式返回在分区中下一行计算表达式 expr 的结果。或者,如果没有下一行(因为当前行是最后一行),则返回 NULL。
如果提供了 offset 参数,则它必须是非负整数。在这种情况下,返回的值是分区中当前行之后 offset 行计算表达式 expr 的结果。如果 offset 为 0,则对当前行计算 expr。如果当前行之后没有 offset 行,则返回 NULL。
如果还提供了 default 参数,则如果 offset 指定的行不存在,返回 default 而不是 NULL。
对比leadInFrame, lead函数下用户提供的Frame定义被忽略,使用默认的rows between unbounded preceding and unbounded following
此内置窗口函数为每行计算窗口框架的方式与聚合窗口函数相同。它返回在窗口框架的第一行计算表达式 expr 的结果。
此内置窗口函数为每行计算窗口框架的方式与聚合窗口函数相同。它返回在窗口框架的最后一行计算表达式 expr 的结果。
此内置窗口函数为每行计算窗口框架的方式与聚合窗口函数相同。它返回在窗口框架的第 N 行计算表达式 expr 的结果。行在窗口框架内从 1 开始编号,按照 ORDER BY 子句定义的顺序排列(如果有)。如果分区中没有第 N 行,则返回 NULL。
lagInFrame
函数的第一种形式返回在窗口框架中前一行计算表达式 expr
的结果。或者,如果没有前一行(因为当前行是第一行),则返回 NULL
。
如果提供了 offset
参数,则它必须是非负整数。在这种情况下,返回的值是窗口框架中当前行之前 offset
行计算表达式 expr
的结果。如果 offset
为 0,则对当前行计算 expr
。如果当前行之前没有 offset
行,则返回 NULL
。
如果还提供了 default
参数,则如果 offset
指定的行不存在,返回 default
而不是 NULL
。
leadInFrame
函数的第一种形式返回在窗口框架中下一行计算表达式 expr
的结果。或者,如果没有下一行(因为当前行是最后一行),则返回 NULL
。
如果提供了 offset
参数,则它必须是非负整数。在这种情况下,返回的值是窗口框架中当前行之后 offset
行计算表达式 expr
的结果。如果 offset
为 0,则对当前行计算 expr
。如果当前行之后没有 offset
行,则返回 NULL
。
如果还提供了 default
参数,则如果 offset
指定的行不存在,返回 default
而不是 NULL
。
nonNegativeDerivative
函数计算输入序列 value
中相邻值之间的差值,但不会返回负值。具体而言,如果相邻两个值的差值为正,则返回该差值;如果为负或零,则返回零。
此函数常用于处理时间序列数据,尤其是当数据表示累积计数器时,它能有效地处理计数器重置情况。