lag和lead函数介紹
LEAD(EXPR, 〈OFFSET〉, 〈DEFAULT〉)
访问之后的行,OFFSET是缺省为1 的正数,表示相对行数,DEFAULT是当超出选定窗范围时的返回值(如最后行不存在之前行)
实例:
month name income
月份 人名 收入
1 a 1000
2 a 2000
3 a 3000
1 b 2000
2 b 2000
3 b 3000
要求用一个SQL 語句(注意是一个)的把所有人(区分人名)這个月及上月和下月的收入要求列表
月份 人名 当月收入 上月收入 下月收入
1 a 1000 0 2000
2 a 2000 1000 3000
3 a 3000 2000 0
1 b 2000 0 2000
2 b 2000 2000 3000
3 b 3000 2000 0
select month
,name
,lag(income,1,0) over (partition by name order by month) as "last_month_income"
,income as "current_month_income"
,lead(income,1,0) over (partition by name order by month) as "next_month_income"
from test_income
注:lead函数是先按name分组,按month排序,并把当前行income的下一个值放到next_month_income中
<DEFAULT>=0也可以改成null或者其他的 返回值