有张表里保存各月的累计收入,1-12个月每月都是累计收入,现在需要将本月累计数 - 上月累计收入,算出当月的收入,表中每个月份有10000多条数据,我的代码如下:update tb_ods_in_xsmb_bk t 
   set t.qjsr = t.qjsr - (select s.qjsr from tb_ods_in_xsmb_bk s 
                          where to_char(s.rq,'mm') = '04'
                            and s.nsrbh = t.nsrbh)
where to_char(t.rq,'mm') = '05';这样写的执行效率太低了,这只是其中一个字段的处理,非常慢,表中还有15个字段都要这样处理,大家有没有好的方法,急用啊!谢谢大家了

解决方案 »

  1.   

    看看是嵌套查询引起的?这段查询耗费时间?
    select s.qjsr from tb_ods_in_xsmb_bk s  
      where to_char(s.rq,'mm') = '04'
      and s.nsrbh = t.nsrbh
      

  2.   

    如果不更新,单单查询快不快?我的意思是把更新用到的关联写成查询显示出来的执行速度,如果那样也很慢,你得更新服务器配置了;如果那样很快,就可以优化更新语句,使用for游标对查询遍历,逐行更新。
      

  3.   

    其实用自连接,直接查询就行啦where to_char( add_months(s.rq),'mm') = to_char(t.rq,'mm') 
     and s.nsrbh = t.nsrbh