首先建表:
create table test(
strdate varchar2(8), 
indexzdf number,
indexprice number
);插入数据后,表中数据为:
STRDATE           INDEXZDF       INDEXPRICE
20080321          0        1000
20080324 -4.5514699
20080325 1.65243499
20080326 -0.1487968
20080327 -5.0357180
20080328 2.97210729
20080331 -4.0724884
20080401 -6.6299527
20080402 -1.5251111
20080403 3.85765855
20080407 4.80564031
20080408 1.04766019
20080409 -4.3915539 现在需要做的是求出首记录之外的INDEXPRICE,其他日期的INDEXPRICE是根据当日INDEXZDF和前一日INDEXPRICE推算出来的,
举例说明,如计算20080324对应的INDEXPRICE,则INDEXPRICE = (-4.5514699 / 100+1)* 1000  其中:-4.5514699是20080324当天的INDEXZDF,而1000是前一日的INDEXPRICE;
计算好每一日的INDEXPRICE后再插入表中,请高手帮忙解决下,先谢谢拉^_^

解决方案 »

  1.   

    用lag(INDEXPRICE,1,0) over(order by INDEXPRICE)来取得前一日的INDEXPRICE,不过你这个够利害的
      

  2.   

    楼上的办法我也想过,但是前一日的INDEXPRICE不是每个日期都有的,是不是要用循环呢?
      

  3.   

    SQL> select * from test order by strdate;STRDATE    INDEXZDF INDEXPRICE
    -------- ---------- ----------
    20080321          0       1000
    20080324 -4.5514699
    20080325 1.65243499
    20080326  -1.652435
    20080327  .65243499
    20080328 1.65243499
    20080401 3.65243499
    20080403 4.65243499
    20080406  -4.652435
    20080407  -2.652435
    20080411 2.65243499
    20080413 3.65243499
    20080415  .65243499已选择13行。SQL> edit
    已写入 file afiedt.buf  1  declare
      2  price number;
      3  begin
      4  select INDEXPRICE into price from test
      5  where STRDATE=(select max(STRDATE) from test where INDEXPRICE is not null);
      6  for x in (select * from test where INDEXPRICE is null order by strdate asc) loop
      7  update test set INDEXPRICE=(x.indexzdf/100+1)*price where strdate=x.strdate;
      8  price:=(x.indexzdf/100+1)*price;
      9  end loop;
     10* end;
    SQL> /PL/SQL 过程已成功完成。SQL> select * from test;STRDATE    INDEXZDF INDEXPRICE
    -------- ---------- ----------
    20080326  -1.652435 954.224675
    20080327  .65243499  960.45037
    20080328 1.65243499 976.321188
    20080403 4.65243499 1059.06243
    20080406  -4.652435 1009.79024
    20080321          0       1000
    20080324 -4.5514699 954.485301
    20080325 1.65243499  970.25755
    20080401 3.65243499 1011.98069
    20080407  -2.652435 983.006208
    20080411 2.65243499 1009.07981
    20080413 3.65243499 1045.93579
    20080415  .65243499 1052.75984已选择13行。SQL>