一.与lag,lead,ntile函数的结合
1.lag(col,n,default_val):取前第N行数据,窗口中的数据必须是有序的
2.lead(col,n,default_val): 取后第N行数据,窗口中的数据必须是有序的
案例:查询每个顾客上次和下次的购买时间
select name,orderdate,cost,
lag(orderdate,1) over (partition by name order by orderdatte) lag_date,
lead(orderdate,1) over (partition by name order by orderdatte) lead_date
from sale_details;
3.ntile(n):分成N组,把有序窗口的行分发到指定数据的组合,各个组有编号,编号从1开始,对于每一行,ntile返回此行所属的组的编号。注意:n必须为int类型
案例:查询前20%时间的订单信息
方法一:使用ntile
select * from (select name,orderdate,cost,
ntile(5) over(order by orderdate) ntile_col
from sale_details) where ntile_col=1;
方法二:使用percent_rank
select name,orderdate,cost
percent_rank() over (order by orderdate) p_rank
from sale_details;
二、与rank,dense_rank,row_number等排序函数的结合
select name,orderdate,cost,
rank() over(partition by subject order by score desc) r,
dense_rank() over(partition by subject order by score desc) dr,
row_number() over(partition by subject order by score desc) rn
from sale_detail;