Один вариант использует таблицу календаря для представления всех дат, которые вы хотите увидеть.Для примера ваших данных мы можем просто жестко закодировать даты в CTE.С фактическими данными вы хотели бы создать диапазон дат.Это означает, что подзапрос под псевдонимом d
будет заменен фактической таблицей / представлением, содержащим даты, диапазон которых вы хотите включить в запрос.
SELECT
d.date,
COUNT(*) AS count
FROM
(
SELECT '2018-01-01' AS date UNION ALL
SELECT '2018-01-02' UNION ALL
SELECT '2018-01-03' UNION ALL
SELECT '2018-01-04'
) d
LEFT JOIN yourTable t
ON d.date >= t.strdate AND (d.date <= t.enddate OR t.enddate IS NULL)
GROUP BY
d.date
ORDER BY
d.date;

Демо
В этом ответе предполагается, что если конечной датой будет NULL
, то это означает, что правая часть диапазонаполностью открыт, т. е. все даты будут совпадать при условии, что даты их начала также находятся в пределах диапазона.