您好我有以下数据集,其中包含日期(始终从2015-01至2016-05期间),以及帐户和值(每个帐户将具有2015-01至2016-05期间)。
Date Account Value
2015-05-01 Null 0
2015-06-01 Null 0
2015-07-01 Null 0
2015-08-01 Null 0
2015-09-01 Null 0
2015-10-01 100 50
2015-11-01 Null 0
2015-12-01 Null 0
2016-01-01 Null 0
2016-02-01 100 80
2016-03-01 Null 0
2016-04-01 100 100
2016-05-01 Null 0
2015-05-01 200 200
2015-06-01 Null 0
2015-07-01 Null 0
2015-08-01 Null 0
2015-09-01 Null 0
2015-10-01 200 50
2015-11-01 Null 0
2015-12-01 Null 0
2016-01-01 Null 0
2016-02-01 200 80
2016-03-01 Null 0
2016-04-01 200 100
2016-05-01 Null 0
我想填写Null和0,以便在2015-01至2016-05期间同一帐户no将在该期间出现(请参阅下表)。如果有可用的(如帐户200)或下一个值(作为帐户100),我还想更改该值,以便填充前一个值
Date Account Value
2015-05-01 100 50
2015-06-01 100 50
2015-07-01 100 50
2015-08-01 100 50
2015-09-01 100 50
2015-10-01 100 50
2015-11-01 100 50
2015-12-01 100 50
2016-01-01 100 50
2016-02-01 100 80
2016-03-01 100 80
2016-04-01 100 100
2016-05-01 100 100
2015-05-01 200 200
2015-06-01 200 200
2015-07-01 200 200
2015-08-01 200 200
2015-09-01 200 200
2015-10-01 200 50
2015-11-01 200 50
2015-12-01 200 50
2016-01-01 200 50
2016-02-01 200 80
2016-03-01 200 80
2016-04-01 200 100
2016-05-01 200 100
非常感谢任何帮助!
答案 0 :(得分:0)
编辑:当表名为“test_account”并且我将列重命名为date_month,account_id和value_account时,这应该适用于您的输入数据。
在表中,日期是2015年1月15日至2016年1月15日的日期,如您的示例
with date_intervals as
(
select a.*,
nvl(lag(date_month) over (partition by account_id order by date_month asc),'01.01.1999') as start_date,
lead(date_month) over (partition by account_id order by date_month asc) as end_date
from test_account a
where account_id is not null
)
select a.date_month,b.account_id,b.value_account
from dates a
join date_intervals b on (a.date_month>b.start_date and a.date_month<=b.date_month)
or (a.date_month>b.date_month and end_date is null)