Sql server 获取SQL SERVER中运行的日期总数
我想创建一个连续的日期列表,在上面的日期基础上增加6周。到目前为止,我的代码给了我一个开始和结束日期。我需要显示开始日期和结束日期之间的6周间隔Sql server 获取SQL SERVER中运行的日期总数,sql-server,tsql,Sql Server,Tsql,我想创建一个连续的日期列表,在上面的日期基础上增加6周。到目前为止,我的代码给了我一个开始和结束日期。我需要显示开始日期和结束日期之间的6周间隔 aLearnerRef startdate enddate reviewdate ------------------------------------------------------ 399750423600 2013-11-27 2014-06-12 2014-01-08 399750423600
aLearnerRef startdate enddate reviewdate
------------------------------------------------------
399750423600 2013-11-27 2014-06-12 2014-01-08
399750423600 2013-11-27 2014-06-12 2014-02-19
399750423600 2013-11-27 2014-06-12 2014-04-02
399750423600 2013-11-27 2014-06-12 2014-05-14
我希望它循环,直到它到达enddate之前的最后一个日期。我想不出一个可能的办法来做这件事。以下是到目前为止我拥有的代码:
SELECT a.aLearnerRef, x.startdate, x.enddate
FROM aims a
inner join vStudyP s
on s.LearnerRef = a.aLearnerRef
join (SELECT aLearnerRef, min(learnstartdate) startdate, max(learnplannedenddate) enddate
FROM aims
GROUP BY aLearnerRef) x
on a.aLearnerRef = x.aLearnerRef
group by a.aLearnerRef, x.startdate, x.enddate
试试这个代码
with cte as
(
select ak.akid,sdate,edate,DATEADD(WEEK,6,sdate) rdate from ak
Union All
select ak.akid,ak.sdate,ak.edate,DATEADD(WEEK,6,rdate) rdate from ak
inner join cte on rdate between ak.sdate and ak.edate
where DATEADD(WEEK,6,rdate) between ak.sdate and ak.edate
)
select * from CTE
如果有多个记录
with cte as
(
select ak.akid,sdate,edate,DATEADD(WEEK,6,sdate) rdate from ak
Union All
select ak.akid,ak.sdate,ak.edate,DATEADD(WEEK,6,rdate) rdate from ak
inner join cte on rdate between ak.sdate and ak.edate
where DATEADD(WEEK,6,rdate) between ak.sdate and ak.edate
and cte.akid = ak.akid
)
select * from CTE
演示链接,使用辅助编号表:
SELECT a.aLearnerRef, dateadd(day,n,a.startdate), a.enddate
FROM aims a
inner join numbers num
on n < datediff(day,startdate, enddate)
选择a.aLearnerRef、dateadd(day、n、a.startdate)、a.enddate
从目标a
内连接数
在n
我认为递归CTE在这里很有用。将尝试一些代码和共享。谢谢,这很有意义。如果ak中有超过1条记录呢?那么您希望对每一条记录都遵循相同的模式吗?如果您只想将此ans用于一条记录,则可以在两条select语句中应用where子句。所以这取决于你的要求。我认为它也适用于多张唱片。仍将编辑第二个选项(&post)仅添加一个条件。如果您对ans.感到满意,请将ans.标记为有用。