在未来,期间和开始日期中发现事件

时间:2009-11-27 10:08:03

标签: sql-server-2008

好的,我会简化这篇文章。

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

你认为这很简单,但我花了最后几天从我的眼睛里流下来试图弄清楚这个。输出还需要说明下一个任务的到期时间。

1 个答案:

答案 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)