ORACLE确定当前记录和下一条记录之间的差值

今天要给客户做一张报表,主要是反应当天的话务数量与前一天之间的对比情况,也就是说,假设表结构是这样的:
日  期 呼入号码数
2015/12/26 10248
2015/12/27 9640
2015/12/28 9362
2015/12/29 9911
那么做出来的表应该是这样的:
日  期呼入号码数   增幅
2015/12/26 10248 -29.29%
2015/12/279640 -5.93%
2015/12/289362 -2.88%
2015/12/299911 5.86%

其中 增幅应该是 当前的记录跟上一天记录去做对比,这种情况在IREPORT中应该是可以实现的,但是ireport资料较少。
故从sql入手,目前想到的有两种方法:
1、拼两遍sql
select XX from xxx a,
select XX from xxx b
where a.日期=b.日期-1天

2、使用oracle lead、lag函数
 select  日期,
          号码个数,
        LAG( 号码个数) over(order by  日期) 上一天数量 from xxx where 1=1

   select  日期,
          号码个数,
        lead( 号码个数 ) over(order by  日期 ) 下一天数量 from xxx where 1=1  
然后再用相应的公式算出增幅百分比即可 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Oracle的LEFT JOIN来匹配记录时,LEFT JOIN会返回左边表(左表)的所有记录,如果在右边表(右表)中找到匹配的记录,则返回匹配的结果,否则将返回NULL。 如果我们希望只匹配一条记录并跳出继续转下一条时,有一种简单的方法可以实现。我们可以使用ROWNUM来实现这个要求。 假设有两个表A和B,我们要根据条件将它们进行LEFT JOIN,并且对于每一行记录,我们只希望匹配到一条记录并且跳出转到下一条。我们可以使用ROWNUM来进行限制。 具体步骤如下: 1. 编写LEFT JOIN查询语句,将表A和B进行连接并根据条件进行匹配。例如: SELECT A.column1, B.column2 FROM A LEFT JOIN B ON A.id = B.id WHERE A.column1 = 'Some Condition'; 2. 在原始查询之上使用ROWNUM进行限制,设置ROWNUM的值为1。这样就可以确保对于每一条左表的记录,只匹配到一条记录后就跳出转到下一条。例如: SELECT A.column1, B.column2 FROM ( SELECT A1.column1, B1.column2, ROWNUM as rn FROM A A1 LEFT JOIN B B1 ON A1.id = B1.id WHERE A.column1 = 'Some Condition') t WHERE t.rn = 1; 这样,在左表的每一条记录中,只会匹配到一条与之相对应的右表记录,并且通过ROWNUM限制,确保只返回一条匹配结果。当匹配完一条记录后,就会跳出进行下一条记录的匹配。 需要注意的是,如果对于左表的某条记录,没有在右表中找到匹配的记录,则返回的结果会为NULL。 以上就是使用Oracle的LEFT JOIN在匹配到一条记录时跳出并转到下一条的方法。希望可以帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值