Я предполагаю, что вы пытаетесь вычислить дату, которая составляет x рабочих дней после данной даты, например. какая дата 10 рабочих дней с сегодняшнего дня. Я также предполагаю, что ваша таблица плохих дат содержит нерабочие дни, например, Выходные и праздничные дни.
В прошлом я сталкивался с аналогичными требованиями и обычно заканчивался таблицей дней, которая содержит все возможные даты вместе с флагом, указывающим, является ли конкретная дата рабочим днем или нет.
Затем я использую эту таблицу, чтобы вычислить, какая дата составляет x рабочих дней от предоставленной даты, выбрав запись, которая составляет x дней после начальной даты.
Так что-то вроде этого
CREATE TABLE all_days (
dated DATETIME,
day_state CHAR(1)
)
Где day_state - значение
D - Рабочий день
W - выходные
B - банковский выходной
SQL для поиска даты после x рабочих дней становится
SELECT MAX(dated)
FROM (
SELECT TOP(@number_days) dated
FROM all_days
WHERE day_state = 'D'
AND dated >= @start_date
ORDER by dated ASC
)
Этот код не проверен, но должен дать вам общее представление. Возможно, вы не захотите проводить различие между выходными и праздничными днями. В этом случае вы можете переименовать day_state в working_day и сделать его полем BIT.
Вам следует создать составной уникальный индекс по датам и состоянию дня.