WITH test AS (
 SELECT 12 DAY,10 a,0 b FROM dual UNION ALL
 SELECT 11,8,NULL FROM dual )
 SELECT DAY,
        A,
        b,
        (0.2 *
        (SELECT DECODE(B, NULL,10, B) FROM TEST K WHERE K.DAY = T.DAY - 1) +
        0.8 * A)
   FROM TEST T
是这个意思么?

解决方案 »

  1.   


     WITH test AS (
     SELECT 12 DAY,10 a,0 b FROM dual UNION ALL
     SELECT 11,8,NULL FROM dual UNION ALL
     SELECT 13,8,8 FROM dual)
     SELECT DAY,
            A,
            B,
            (0.2 *
            DECODE((SELECT B FROM TEST K WHERE K.DAY = T.DAY - 1),
                    NULL,
                    10,
                    (SELECT B FROM TEST K WHERE K.DAY = T.DAY - 1)) + 0.8 * A)
       FROM TEST T
    还是这个。。
      

  2.   

    SQL> create table tt_test (tday date,a number,b number);
     
    Table created
     
    SQL> 
    SQL> insert into tt_test (tday,a) values (to_date('2014/03/01','yyyy/mm/dd'),5);
     
    1 row inserted
    SQL> insert into tt_test (tday,a) values (to_date('2014/03/02','yyyy/mm/dd'),10);
     
    1 row inserted
    SQL> insert into tt_test (tday,a) values (to_date('2014/03/03','yyyy/mm/dd'),15);
     
    1 row inserted
    SQL> insert into tt_test (tday,a) values (to_date('2014/03/05','yyyy/mm/dd'),20);
     
    1 row inserted
    SQL> commit;
     
    Commit complete
     
    SQL> 
    SQL> update tt_test t1
      2     set b = 1 / 5 *
      3             decode((select b from tt_test where tday = t1.tday - 1),
      4                    null,
      5                    10,
      6                    (select b from tt_test where tday = t1.tday - 1)) + 4 / 5 * a;
     
    4 rows updated
    SQL> commit;
     
    Commit complete
     
    SQL> select * from tt_test;
     
    TDAY                 A          B
    ----------- ---------- ----------
    2014/3/1             5          6
    2014/3/2            10         10
    2014/3/3            15         14
    2014/3/5            20         18
     
    SQL>