1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
drop table releve;
create table releve
(
rel_id int identity(1,1) not null,
rel_date date not null,
rel_valeur int not null
);
create unique clustered index uix_rel_date on releve(rel_date);
alter table releve
add primary key (rel_id);
insert into releve (rel_date, rel_valeur) values ('2012-08-01', 1000);
insert into releve (rel_date, rel_valeur) values ('2012-08-02', 1010);
insert into releve (rel_date, rel_valeur) values ('2012-08-05', 1040);
insert into releve (rel_date, rel_valeur) values ('2012-08-10', 1120);
insert into releve (rel_date, rel_valeur) values ('2012-08-15', 1180);
insert into releve (rel_date, rel_valeur) values ('2012-08-21', 1500);
select * from releve;
WITH cte_cpt (cpt)
AS
(
select 0
UNION ALL
select cpt + 1 from cte_cpt where cpt < 100
)
insert into releve (rel_date, rel_valeur)
select dateadd(day, cte_cpt.cpt, r1.rel_date), r1.rel_valeur + (cte_cpt.cpt * ((r2.rel_valeur - r1.rel_valeur) / DATEDIFF(day, r1.rel_date, r2.rel_date)))
from releve r1
inner join releve r2 on r2.rel_date > dateadd(day, 1, r1.rel_date)
inner join cte_cpt on cte_cpt.cpt < DATEDIFF(day, r1.rel_date, r2.rel_date) and cte_cpt.cpt > 0
where r2.rel_date = (select MIN(rel_date) from releve where rel_date > r1.rel_date);
select * from releve; |
Partager