2009-11-27 76 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

相關問題