У меня уже заполнена календарная таблица (Calendar_Date, Is_Business_Day).
Мне уже удалось сделать SELECT
на этой основе:
Например : Сегодня 2018-05-02, это мой результат:
Calendar_Date | Is_Business_Day
2000-01-01 | 0
... |
2018-03-29 | 1
2018-03-30 | 1
2018-03-31 | 0
Например : Завтра, 2018-05-03 это будет мой результат:
Calendar_Date | Is_Business_Day
2000-01-01 | 0
... |
2018-04-28 | 0
2018-04-29 | 0
2018-04-30 | 1
Это мой запрос:
SELECT Calendar_Date, Is_Business_Day
FROM Calendar_Table
WHERE (Calendar_Date <= (CASE WHEN DATEPART(day, GETDATE()) >= 3 THEN EOMONTH(DATEADD(MONTH, - 1, GETDATE())) ELSE EOMONTH(DATEADD(MONTH, - 2, GETDATE())) END))
Это работает отлично, но сейчас я бы хотел, чтобы он переключался после первый рабочий день после 3-го дня месяца, вместо переключения после 3-го дня месяца.
Как я могу использовать для этого информацию о рабочих днях в моем календаре?
Когда я добавляю AND Is_Business_Day = 1
, я получаю только рабочие дни в моем выборе, но я также хотел бы, чтобы не были рабочие дни.
Я думаю, что следующий запрос должен работать.
;WITH CTE AS
(
SELECT Calendar_Date, Is_Business_Day
FROM Calendar_Table
WHERE (Calendar_Date <= (CASE WHEN DATEPART(day, GETDATE()) >= 3
THEN EOMONTH(DATEADD(MONTH, - 1, GETDATE()))
ELSE EOMONTH(DATEADD(MONTH, - 2, GETDATE())) END))
)
SELECT * FROM CTE
WHERE Calendar_Date >= (SELECT MIN(Calendar_Date) FROM CTE WHERE Is_Business_Day=1)
довольно чисто! +1
Разве добавление
AND Is_Business_Day = 1
к пунктуWHERE
этого не делает? Ваш вопрос неясен, потому что вы спрашиваете о «переключении», не объясняя нигде в своем вопросе, который вы имеете в виду под «переключением».