表tb1的记录如下:
v_date name val201201 中国 5
201203 中国 9
201204 中国 10
要实现的功能是找出对应日期下个月的val值是什么?用于本月和下月的对比
select v_date,
name,
val,
sum(val) over(order by to_date(v_date, 'yyyymm') range between interval '0' month preceding and interval '1' month following) - val m_val
from tb1;
Range表示数值范围,Rows表示行范围。
Range的语法:
over(order by xx range between n preceding and n following)
Range between必须为聚合函数/开窗函数服务,而且必须针对数值字段,因为表示的是一个数值范围,这个很容易和行范围rows混淆
Rows的语法:
over(order by xx rows between x preceding and y following)
每行对应的数据窗口是之前x行,之后y行,共包括x+1+y行