2009-11-27 82 views
0

好的,我会简化这篇文章。查找未来的发生次数,期间和开始日期

我有一个表“任务”,其中包含例如任务名称,开始日期和频率。基于这些字段,我需要能够指定一个日期范围并返回该任务到期时的每个事件。例如,如果我的任务频率为M(每月),我的日期范围是今天和未来一年,那么我将从我的输出中返回该任务的十二次。

你会认为这很简单,但是我已经花了几天的时间试图找出这个问题。输出还需要说明任务何时到期。

回答

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) 
+0

递归CTE?我以前从未使用过,尽管我使用CTE。这看起来有希望。让我试着快速实施它。 – Kezzer 2009-11-27 10:27:13

+0

如果我有能力,我会把你的腿撑起来,但我会将你的答案标记为正确的。感谢您防止我脑出血。 – Kezzer 2009-11-27 10:40:55

相关问题