我们以3个元素(2 PRECEDING)的窗口为例,如下图:

上图所示窗口 user 1 的 w5和w6, user 2的 窗口 w2 和 w3,虽然有元素都是同一时刻到达,但是他们仍然是在不同的窗口,这一点有别于RANGE OVER Window。
b. 语法
Bounded ROWS OVER Window 语法如下:
- SELECT
- agg1(col1) OVER(
- [PARTITION BY (value_expression1,..., value_expressionN)]
- ORDER BY timeCol
- ROWS
- BETWEEN (UNBOUNDED | rowCount) PRECEDING AND CURRENT ROW) AS colName,
- ...
- FROM Tab1
- value_expression - 进行分区的字表达式;
- timeCol - 用于元素排序的时间字段;
- rowCount - 是定义根据当前行开始向前追溯几行元素。
c. SQL 示例
利用item_tab测试数据,我们统计同类商品中当前和当前商品之前2个商品中的最高价格。
- SELECT
- itemID,
- itemType,
- onSellTime,
- price,
- MAX(price) OVER (
- PARTITION BY itemType
- ORDER BY onSellTime
- ROWS BETWEEN 2 preceding AND CURRENT ROW) AS maxPrice
- FROM item_tab
d. Result

(2) Bounded RANGE OVER Window
Bounded RANGE OVER Window 具有相同时间值的所有元素行视为同一计算行,即,具有相同时间值的所有行都是同一个窗口。
a. 语义
我们以3秒中数据(INTERVAL '2' SECOND)的窗口为例,如下图:

注意: 上图所示窗口 user 1 的 w6, user 2的 窗口 w3,元素都是同一时刻到达,他们是在同一个窗口,这一点有别于ROWS OVER Window。
b. 语法
Bounded RANGE OVER Window的语法如下:
- SELECT
- agg1(col1) OVER(
- [PARTITION BY (value_expression1,..., value_expressionN)]
- ORDER BY timeCol
- RANGE
- BETWEEN (UNBOUNDED | timeInterval) PRECEDING AND CURRENT ROW) AS colName,
- ...
- FROM Tab1
- value_expression - 进行分区的字表达式;
- timeCol - 用于元素排序的时间字段;
- timeInterval - 是定义根据当前行开始向前追溯指定时间的元素行;
c. SQL 示例
(编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|