日期:2014-05-17  浏览次数:20854 次

oracle实现相乘语句
现在有一个表,表里有列day和A,想新增一个列B,
当前B值为B=1/5×上一日B值+4/5×当前A值。
若无上一日B值,则用10代替。该怎么计算,好急阿,求各位大神赐教!!!

------解决方案--------------------
 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

是这个意思么?
------解决方案--------------------

 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

还是这个。。
------解决方案--------------------
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