oracle lag函数

项目中有这么个需求   求出增长率 如:

2001     10    --

2002     20   100%

2003     30   50%

 

每个时间点对前一个时间的数量相减求出增长率(20-10)/10,(30-20)/20。第一条记录没有则显示'--'

 

[TEST2@orcl#17-4月 -11] SQL>select * from t3;

        ID        NUM
---------- ----------
         1          1
         2          2
         3          4
         4          5

 

[TEST2@orcl#17-4月 -11] SQL>select id,num,lag(num,1) over (order by id) as bai from t3;

        ID        NUM        BAI
---------- ---------- ----------
         1          1
         2          2          1
         3          4          2
         4          5          4

 

[TEST2@orcl#17-4月 -11] SQL>select id,num, case when bai is null then '--' else to_char(round((num-bai)/bai,2)*100,'990.99') end as bai from (select id,num,lag(num,1) over (order by id) as bai from t3);

        ID        NUM BAI
---------- ---------- -------
         1          1 --
         2          2  100.00
         3          4  100.00
         4          5   25.00

 

类似的函数还有lead

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值