Получить недостающие даты из базы данных через MySQL - PullRequest
2 голосов
/ 05 июня 2010

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

Мой текущий запрос выглядит так:

SELECT job_data_date, SUM(job_data_invoice_amount) as job_data_date_income 
FROM job_data 
WHERE job_data_date >= '2010-05-05' 
GROUP BY job_data_date 
ORDER BY job_data_date;

Вывод:

|   job_data_date   |   job_data_date_income    |
|   2010-05-17      |   125                     |
|   2010-05-18      |   190                     |
|   2010-05-20      |   170                     |

Как видно из выходных данных примера, 2010-05-19 не будет отображаться в результатах, поскольку он никогда там не хранился.

Есть ли способ показать пропущенные даты?

Спасибо,

Марат

Ответы [ 2 ]

2 голосов
/ 05 июня 2010

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

Итак, если у вас есть таблица с именем alldates с одним столбцом (job_data_date):

SELECT ad.job_data_date, SUM(job_data_invoice_amount) as job_data_date_income 
FROM alldates ad left outer join job_data jd on ad.job_data_date = jd.job_data_date 
WHERE ad.job_data_date >= '2010-05-05' 
GROUP BY ad.job_data_date 
ORDER BY ad.job_data_date;

Недостатком является то, что вам нужно будет заполнить эту таблицу всеми датами, которые вы хотите показать.

1 голос
/ 05 июня 2010

Нет никакого разумного способа сделать это, используя чистый SQL, по крайней мере на MySQL, без создания таблицы с каждой когда-либо разработанной датой. Лучший вариант - изменить приложение, использующее результаты этого запроса, чтобы заполнить сами отверстия. Вместо того, чтобы отображать только полученные значения, создайте свой собственный набор значений с помощью простого цикла; считая один день за один раз, заполняя значения из запроса везде, где они доступны.

...