получить пропущенные даты между двумя диапазонами дат - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу получить даты пропусков между заданным диапазоном дат, например,

дата между 2019-02-01 и 2019-01-28

У меня есть только 5 дней между этими диапазонами.но я хочу получить всю дату с нулевым значением, если не существует, как это

1,"abc","2019-02-01",
2,"test","2019-2-06",

, если не существует, то показать, как это

    3,"null","2019,02-02"  4,"null","2019,02-03" 5,"null","2019,02-03",....
,
,

1 Ответ

0 голосов
/ 07 февраля 2019

Чтобы вернуть эти «отсутствующие» значения даты в наборе результатов, нам нужен источник строк, который их предоставляет.То есть эти ценности должны прийти откуда-то;строки не просто самопроизвольно появляются в запросе из ниоткуда.

Одним из решений является добавление таблицы «календарь», которая содержит набор значений даты.

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 запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...