好的,我会简化这篇文章。
我有一个表“tasks”,包含例如任务名称,启动日期和频率。基于这些字段,我需要能够指定一个日期范围,并在该任务到期时返回该任务的每次出现。例如,如果我有一个频率为M(每月)且我的日期范围是今天和未来一年的任务,那么我将从我的输出中返回十二次该任务。
你认为这很简单,但我花了最后几天从我的眼睛里流下来试图弄清楚这个。输出还需要说明下一个任务的到期时间。
答案 0 :(得分:1)
这样的事情怎么样?您可以扩展案例以允许其他频率
DECLARE @Table TABLE(
TaskName VARCHAR(10),
StartDate DATETIME,
Frequency VARCHAR(10) --let say D,W,M daily, weekly, monthly
)
INSERT INTO @Table (TaskName,StartDate,Frequency) SELECT 'TADA', '15 Jan 2009', 'M'
DECLARE @StartDate DATETIME,
@EndDate DATETIME
SELECT @StartDate = '27 Nov 2009',
@EndDate = '27 Nov 2010'
;WITH cte AS(
SELECT TaskName,
StartDate,
Frequency
FROM @Table
UNION ALL
SELECT TaskName,
CASE
WHEN Frequency = 'M' THEN DATEADD(mm,1,StartDate)
END,
Frequency
FROM cte
WHERE StartDate <= @EndDate
)
SELECT *
FROM cte
WHERE StartDate BETWEEN @StartDate AND @EndDate
OPTION (MAXRECURSION 0)