第1个回答 2012-11-15
很简单,我只是给你举个例子,剩下的你自己完成,下面的语句只可以直接执行。
with v_tmp as -- 建一个临时视图
(select '2012.11.11' date1, 111.2 balance
from dual
union all
select '2012.11.12' date1, 91.2 balance from dual order by date1)
select to_char(b.date1, 'yyyy.mm.dd'), NVL(a.balance, b.balance)
from v_tmp a,
(select to_date('2012.11.11', 'yyyy.mm.dd') + rownum - 1 date1, -- 生成日期列
(select distinct last_value(c.balance) over() from v_tmp c) balance -- 取最后一个值
from dual
start with rownum = 1
connect by rownum < 15) b
where a.date1(+) = to_char(b.date1, 'yyyy.mm.dd')
order by 1;
第2个回答 2012-11-15
你的time是date类型吗?
如果不是 自己想办法用to_date转一下 我给你提供的SQL 只有在你time类型为date有效
SELECT * FROM(SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER TIME DESC) RN, ID, BALANCE
FROM A) T
WHERE T.RN = 1;
好了 给分!还有问题加我QQ :772642286
第3个回答 2012-11-15
select id,time,nvl(balance,lag(avg(balance),1)over(paratition by balance)) from tab;