Я прочитал несколько статей о датах и расписаниях в SQL, но решение моей проблемы продолжает ускользать от меня.SQL - функция для получения следующей даты выполнения (или просроченной даты)
Я использую SQL Server 2008 r2.
Мне нужно предоставить пользователю следующую дату (даже если это было в прошлом). Пользователь может создать расписание для импорта некоторых данных, указав частоту (ежедневно, еженедельно, ежемесячно), «множитель» (т.е. каждые 3 дня, каждые 2 недели, каждые 6 месяцев и т. Д.) И начало Дата.
Итак, мои данные выглядит примерно так:
Frequency | Multiplier | Start date
Weekly | 2 | 02/15/2012
Monthly | 1 | 03/01/2012
Первая запись будет планировать импорт каждые 2 недели, начиная с 2/15/2012 Вторая запись будет каждый месяц на 1 (может быть проблемой, если они выберут 31-ю, еще не рассмотрели это).
У меня также есть последняя дата импорта, которая может быть или не быть вовремя. Итак, я хочу написать функцию, в которой я могу передавать частоту (еженедельно, ежедневно и т. Д.), Множитель и последнюю дату импорта, и рассчитывать, когда следующая «дата погашения» после последнего импорта Дата.
Итак, данная запись 1 выше (Импорт каждые 2 недели, начиная с 2/15/2012). Если у меня есть последняя дата импорта 3/1/2012, мне нужно будет вернуться 3/14/2012. Очевидно, учитывая, что сегодня 22-го числа, эта дата будет просрочена, и я мог бы отметить ее как таковой в любом пользовательском интерфейсе, который использует эти данные. Если моя последняя дата импорта - 3/22/2012, я вернусь 3/28/2012 в качестве следующей установленной даты и так далее. Возможно, мне понадобится разбить разные частоты (день, неделю, месяц) на три функции, чтобы упростить логику.
Я посмотрел в таблицу Календарь as described here.
Однако, если решение есть, я не уверен, что это точно. Я чувствую себя очень близко к решению, но просто еще не получил его.
Любая помощь очень ценится.
Спасибо, Тони
спасибо за редактирование Сэма. Выглядит намного лучше. –
Вам лучше предоставить несколько иллюстративных примерных данных и ожидаемых результатов, чтобы каждый мог легко понять и найти лучшее решение. –
Thit, пожалуйста, см. Третий абзац после таблицы для иллюстрации и ожидаемых результатов. Благодарю. –