Как оформить sql запрос на выборку данных которых изначально нет (T-SQL)

Есть таблица с полем дата, записи означают смены сотрудников в определенную дату (Id int, ShiftDate date) нужно составить запрос, который выведет все даты за определенный промежуток времени, во время которых ни у одного человека НЕ было смены. В sql server.


Ответы (1 шт):

Автор решения: Akina
WITH cte AS ( SELECT DATEADD(DAY, n.number, @min_date) AS ShiftDate 
              FROM master..spt_values n
              WHERE n.type = 'P'
                AND n.number <= DATEDIFF(DAY, @min_date, @max_date) )
SELECT *
FROM cte
WHERE NOT EXISTS ( SELECT NULL
                   FROM source_table
                   WHERE cte.ShiftDate = source_table.ShiftDate )

Максимальный диапазон - 2047 дней (~ 5.5 лет).

→ Ссылка