Поиск вхождений в будущем, периоды и даты начала - PullRequest
0 голосов
/ 27 ноября 2009

Хорошо, я упросту этот пост.

У меня есть таблица «задач», содержащая, например, имя задачи, дату ее запуска и частоту. Основываясь на этих полях, мне нужно иметь возможность указать диапазон дат и возвращать каждое вхождение этой задачи, когда она должна быть выполнена. Например, если у меня есть задача с частотой M (для месячных), а мой диапазон дат составляет сегодня и год в будущем, то я верну двенадцать вхождений этой задачи из моего вывода.

Вы могли бы подумать, что это просто, но я провел последние несколько дней, истекая кровью из моих глаз, пытаясь понять это. В выводе также должно быть указано, когда задание будет выполнено в следующий раз.

1 Ответ

1 голос
/ 27 ноября 2009

Как насчет этого? Вы можете расширить корпус, чтобы учесть другие частоты

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...