Я считаю, что использование временных переменных может помочь.Вот что я бы сделал.Обратите внимание, что мой синтаксис, вероятно, шейкий, так как я делаю это по памяти.Некоторое легкое гугление поможет вам пройти весь путь.
Шаг 1. Создайте несколько временных переменных.Их нужно запустить одной командой.
DECLARE @MinDate DATETIME;
DECLARE @MaxDate DATETIME;
@MinDate = SELECT Min([DATE_OF_RATE]) FROM CURRENCY_RATE;
@MaxDate = SELECT Max([DATE_OF_RATE]) FROM CURRENCY_RATE;
Шаг 2. Создайте таблицу календаря со всеми возможными датами, буквально указав дату в качестве единственного столбца.Сделайте это вручную, если вам нужно.Вы всегда можете создать таблицу календаря с днями до 2050 года, намного позже, когда эта система больше не будет использоваться.
Шаг 3. Соедините левый переход от таблицы календаря к таблице тарифов на дату.Это даст вам строку независимо от пробелов в ставках.
SELECT c.CalDate FROM Calendar c
LEFT JOIN CURRENCY_RATE cr
ON c.CalDate = cr.DATE_OF_RATE
Шаг 4. Отфильтруйте новую таблицу, где дата находится в диапазоне мин / макс, используя временную таблицу
SELECT c.CalDate FROM Calendar c
LEFT JOIN CURRENCY_RATE cr
ON c.CalDate = cr.DATE_OF_RATE
WHERE c.CalDate >= @MinDate AND c.CalDate <= @MaxDate
Надеюсь, это поможет.