Чтобы вернуть эти «отсутствующие» значения даты в наборе результатов, нам нужен источник строк, который их предоставляет.То есть эти ценности должны прийти откуда-то;строки не просто самопроизвольно появляются в запросе из ниоткуда.
Одним из решений является добавление таблицы «календарь», которая содержит набор значений даты.
CREATE TABLE `cal` ( `dt` date NOT NULL, PRIMARY KEY (`dt`)) ;
INSERT INTO `cal` (`dt`) VALUES ('2019-02-01'), ('2019-02-02'), ('2019-02-03')
, ('2019-02-04'), ('2019-02-05'), ('2019-02-06')
, ...
Тогда мы можем сослатьсятаблица в запросе.Мы можем использовать внешнее соединение, чтобы получить совпадающие строки.Там, где нет подходящей строки, мы все равно возвращаем дату из календарной таблицы
SELECT c.dt AS dt
, t.mycol AS mycol
FROM cal c
LEFT
JOIN mytable t
ON t.dt = c.dt
WHERE c.dt >= '2019-02-01'
AND c.dt < '2019-02-07'
ORDER
BY c.dt
Нам не обязательно создавать календарную таблицу.Другая возможность заключается в создании набора дат во встроенном представлении в запросе.
Но принцип тот же.Нам нужен источник строк, который будет возвращать значения даты, когда мы ссылаемся на него в предложении FROM
запроса.