表名:f_test
表结构:如下图
SQL语句说明:如果表中的数据不是按日连续有值,则某日在没有值的情况下可以沿用上一日的值。或者沿用上一月、上一年的值。
操作说明:①取表中最小日期,并且该日期有所需的值;②取表中最大日期,或者去当前日期;③按日循环遍历日期;④对当日的值进行判断:如果当前日期的值满足需求,则随意给个语句,只要能正常执行,并且不影响表;如果当前日期的值不满足需求,则插入上一日的值;⑤当前日期增1,继续遍历,直至遍历完成。
SQL语句如下:
declare @startDate datetime, @ednDate datetime
select @startDate = MIN(fdate) from f_test
select @ednDate = MAX(fdate) from f_test
while @startDate <= @ednDate
begin
IF EXISTS(select fdate from f_test where fdate=@startDate)
select 1;
ELSE
insert into f_test(fdate, fnumber)select @startDate as fdate, fnumber from f_test where fdate = dateadd(dd,-1,@startDate);
set @startDate=dateadd(dd,1,@startDate)
end