在给定以下数据的情况下填写表(SQL Server 2016):开始日期(日期时间),日期(int),关闭日期(int),重复间隔的频率(int)
数据 - 1/1/2018,开启= 7,关闭= 5,频率= 10
输出:
Date 1/1/2018 1/2/2018 1/3/2018 1/4/2018 1/5/2018 1/6/2018 1/7/2018 **skips 5** 1/13/2018 1/14/2018 1/15/2018 1/16/2018 1/17/2018 1/18/2018 1/19/2018 **skips 5** et. creating 7 and skipping 5 x 10
实现这一点可以使用循环来完成,我希望有一个方便的CTE示例或其他选项。
答案 0 :(得分:2)
您可以使用下面的查询。此解决方案基于Tally / Numbers表方法。 要了解详情,请通读 Jeff Moden article
declare @sd date= '01/01/2018', @on int= 7, @off int= 5, @freq int= 10;
select d
from
(
select
top (@freq* (@on+@off))
d=dateadd(d,row_number() over( order by (select null))-1 ,@sd),
flag=case when row_number() over( order by (select null))%(@on+@off) between 1 and @on then 1 else 0 end
from sys.objects o1
cross join sys.objects o2
)t
where flag=1