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