Привет, У меня есть следующая проблема, и я пытаюсь решить, что лучше всего решить.Справка по структуре SQL для создания расписания уведомлений
У меня есть таблица говорят, называется [Kpi] и данные будут выглядеть так: -
[ContractId] [KpiId] [NotificationIntervalInMonths]
1000 1 3
1000 2 5
У меня есть [Договор] таблица, которая содержит: -
[ContractId] [StartDate] [EndDate]
1000 1/Nov/2009 4/Apr/2011
я после способ показать расписание уведомлений о том, когда Kpi должен уведомить пользователя между датой начала и окончания контракта, например Вышеупомянутая структура создаст следующие столбцы/строки: -
[ContractId] [KpiId] [NotificationDate]
1000 1 1/Feb/2009
1000 1 1/May/2010
1000 1 1/Aug/2010
1000 1 1/Nov/2010
1000 1 1/Feb/2011
1000 2 1/Apr/2010
1000 2 1/Sep/2010
1000 2 1/Feb/2011
Прежде всего я думал, что я хотел бы создать таблицу поиска, который был заселен в каждый раз, когда я вставил новую КПЭ, это представляется возможным и может показаться лучший подход.
Моя бизнес-логика не позволяет изменить [NotificationIntervalInMonths], однако [EndDate] контракта может измениться. Это означает, что мне придется добавлять/удалять записи в таблице поиска на основе нового контракта [EndDate], и для меня это кажется немного беспорядочным.
Так что это приводит меня к моему вопросу, есть ли чистый подход SQL, который может получить мне расписание уведомлений без создания таблицы поиска? Курсоры не допускаются: P, но я надеюсь, что CTE будет работать здесь.
Если я не дал достаточно информации, тогда, пожалуйста, спросите.
У меня есть решение, которое основано на рекурсивном КТР. Однако этот CTE работает только в том случае, если мой интервал уведомлений для каждого Kpi кратен 3. Это нормально для меня, поскольку оно существует, потому что моя бизнес-логика имеет это ограничение. Однако было бы неплохо решить это, если бы мой интервал был настроен на что угодно (для будущей проверки), поэтому, если кто-то может помочь, тогда это будет здорово. Я могу опубликовать свое решение, если захочет какой-либо орган. – Rippo
Решила его наконец, может обслуживать любой промежуток времени. – Rippo