一、常见窗口函数函数
OVER()
- 指定分析函数工作的数据窗口大小,这个数据窗口的大小可能会随着行的变化而变化。
 
CURRENT ROW
- 当前行
 
n PRECEDING
- 往前n行数据
 
n FOLLOWING
- 往后n行数据
 
UNBOUNDED
- 起点,UNBOUNDED PRECEDING表示从前面的起点,UNBOUNDED FOLLOWING表示到后面的终点
 
LAG(col, n)
- 往前第n行数据
 
LEAD(col, n)
- 往后第n行数据
 
NTILE(n)
- 把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。
 
二、案例实操
2.1 数据准备 business表
1  | name,orderdate,cost  | 
2.2 查询在2017年4月份购买过的顾客及总人数
1  | select name, count(*) over()  | 
2.3 查询顾客的购买明细及月购买总额
1  | select name, orderdate, cost, sum(cost) over(partition by substring(ordergate, 1, 7))  | 
2.4 上述的场景,要将cost按照日期进行累加
1  | select name,orderdate,cost,  | 
2.5 查询顾客上次的购买时间
1  | select name, orderdate, cost, lag(orderdate, 1, '1900-01-01') over(partition by name, order by orderdate) as time1  | 
2.6 查询前20%时间的订单信息
1  | select *  |