This seems to do the job:
declare @t table (stime datetime,svalue int)
insert into @t(stime,svalue) values
('2014-01-13T08:40:00',5),
('2014-01-13T08:45:00',6),
('2014-01-13T08:46:00',5),
('2014-01-13T08:50:00',4)
;with times as (
select MIN(stime) as stime,MAX(stime) as etime from @t
union all
select DATEADD(minute,1,stime),etime from times where stime < etime
)
select
t.stime,t_1.svalue
from
times t
left join
@t t_1
on
t.stime >= t_1.stime
left join
@t t_2
on
t.stime >= t_2.stime and
t_2.stime > t_1.stime
where
t_2.stime is null
order by t.stime
option (maxrecursion 0)
CTE times, stime. , , . WHERE , t_2, , t_1 .
option (maxrecursion 0) , CTE , stime .