0
好的,我会简化这篇文章。查找未来的发生次数,期间和开始日期
我有一个表“任务”,其中包含例如任务名称,开始日期和频率。基于这些字段,我需要能够指定一个日期范围并返回该任务到期时的每个事件。例如,如果我的任务频率为M(每月),我的日期范围是今天和未来一年,那么我将从我的输出中返回该任务的十二次。
你会认为这很简单,但是我已经花了几天的时间试图找出这个问题。输出还需要说明任务何时到期。
好的,我会简化这篇文章。查找未来的发生次数,期间和开始日期
我有一个表“任务”,其中包含例如任务名称,开始日期和频率。基于这些字段,我需要能够指定一个日期范围并返回该任务到期时的每个事件。例如,如果我的任务频率为M(每月),我的日期范围是今天和未来一年,那么我将从我的输出中返回该任务的十二次。
你会认为这很简单,但是我已经花了几天的时间试图找出这个问题。输出还需要说明任务何时到期。
这样的事情呢。您可以扩展该案例以允许其他频率
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)
递归CTE?我以前从未使用过,尽管我使用CTE。这看起来有希望。让我试着快速实施它。 – Kezzer 2009-11-27 10:27:13
如果我有能力,我会把你的腿撑起来,但我会将你的答案标记为正确的。感谢您防止我脑出血。 – Kezzer 2009-11-27 10:40:55