Ранее я создал SELECT для расчета рабочих дней (выходных / праздничных дней), которые не работают для определенных диапазонов дат для каждой записи.Мне предложили использовать таблицу календаря, которая фактически работала для других требований, которые у меня были в ожидании, но я не могу понять, как рассчитать INI
и END
для рабочих дней.
Я пыталсясделайте SELECT с полу-левым соединением и объединением (предлагается также), но, похоже, он вообще не рассчитывается.
Это таблица календаря:
CalendarId DateValue DayNumberOfWeek NameOfDay NameOfMonth WeekOfYear JulianDay USAIsBankHoliday USADayName
----------- ----------------------- --------------- ---------- ----------- ----------- ----------- ---------------- -------------------
20100101 2010-01-01 00:00:00.000 5 Viernes Enero 1 1 1 Año nuevo
Моя таблица:
INI FIN DD --DATEDIFF BETWEEN DATES
------------------------------ ------------------------------ -----------
20180129 20180211 14
Моя попытка вычислить рабочие дни
SELECT CONVERT(NVARCHAR,INI,112) AS INI,
CONVERT(NVARCHAR,FIN,112) AS FIN,
DATEDIFF(DD, INI, FIN)+1 AS DD
FROM HISTORICOLICMED T
WHERE EXISTS(
SELECT 1 FROM CALENDAR C
WHERE T.INI = C.CALENDARID and T.FIN = C.CALENDARID
AND C.USAISBANKHOLIDAY = 0 BETWEEN T.INI AND T.FIN)
Я ожидаю получить правильные расчеты рабочего дня, включая выходные дни, поэтому в приведенном выше примере я получу что-то вроде:
INI FIN DD ND
------------------------------ ------------------------------ ----- -----
20180129 20180211 14 10