我需要使用先前记录中的值为给定日期范围创建空记录。 例如,假设我有包含以下列的表 - 数据和余额,数据如下 -
05/05/2015 - 500
09/05/2015 - 700
现在,我想显示日期01/05/2015至2015年5月10日的记录,如下所示
01/05/2015 - 0
02/05/2015 - 0
03/05/2015 - 0
04/05/2015 - 0
05/05/2015 - 500
06/05/2015 - 500
07/05/2015 - 500
08/05/2015 - 500
09/05/2015 - 700
10/05/2015 - 700
oracle中是否有任何分析函数或计算该类记录集的任何技巧? 请建议。
答案 0 :(得分:1)
您可以使用分层查询生成数据范围,然后使用表格进行OUTER JOIN。 然后使用SUM分析函数获取每个日期的最新值。
Oracle 11g R2架构设置:
create table myt(
date_ date,
balance_ number
);
insert into myt values(date'2015-05-05',500);
insert into myt values(date'2015-05-09',700);
查询1 :
with date_list(dates_) as (
select date'2015-05-01' + level - 1
from dual
connect by date'2015-05-01' + level - 1 <= date'2015-05-10'
)
select date_list.dates_, myt.balance_,
coalesce(last_value(myt.balance_) ignore nulls over (order by date_list.dates_),0) balance2,
sum(coalesce(myt.balance_,0)) over (order by date_list.dates_) balance3
from date_list left outer join myt
on date_list.dates_ = myt.date_
order by date_list.dates_
<强> Results 强>:
| DATES_ | BALANCE_ | BALANCE2 | BALANCE3 |
|-----------------------|----------|----------|----------|
| May, 01 2015 00:00:00 | (null) | 0 | 0 |
| May, 02 2015 00:00:00 | (null) | 0 | 0 |
| May, 03 2015 00:00:00 | (null) | 0 | 0 |
| May, 04 2015 00:00:00 | (null) | 0 | 0 |
| May, 05 2015 00:00:00 | 500 | 500 | 500 |
| May, 06 2015 00:00:00 | (null) | 500 | 500 |
| May, 07 2015 00:00:00 | (null) | 500 | 500 |
| May, 08 2015 00:00:00 | (null) | 500 | 500 |
| May, 09 2015 00:00:00 | 700 | 700 | 1200 |
| May, 10 2015 00:00:00 | (null) | 700 | 1200 |