MySql Query: включает дни с COUNT (id) == 0, но только за последние 30 дней - PullRequest
4 голосов
/ 27 июля 2011

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

В моем предложении WHERE я использую submittime, чтобы определить, были ли сборки, как я могу изменить это, чтобы включить дни с COUNT (id) == 0, но только за последние 30 дней.

Оригинальный запрос:

   SELECT COUNT(id) AS 'Past-Month-Builds', 
          CONCAT(MONTH(submittime), '-', DAY(submittime)) as 'Month-Day' 
     FROM builds 
    WHERE DATE(submittime) >= DATE_SUB(CURDATE(), INTERVAL 30 day) 
 GROUP BY MONTH(submittime), DAY(submittime);

Что я пробовал:

   SELECT COUNT(id) AS 'Past-Month-Builds', 
          CONCAT(MONTH(submittime), '-', DAY(submittime)) as 'Month-Day' 
     FROM builds 
    WHERE DATE(submittime) >= DATE_SUB(CURDATE(), INTERVAL 30 day) 
       OR COUNT(id) = 0
 GROUP BY MONTH(submittime), DAY(submittime);

1 Ответ

1 голос
/ 27 июля 2011

Вам нужна таблица дат, затем оставьте соединение с таблицей сборок.

Примерно так:

SELECT 
    COUNT(id) AS 'Past-Month-Builds', 
    CONCAT(MONTH(DateTable.Date), '-', DAY(DateTable.Date)) as 'Month-Day' 
FROM DateTable
    LEFT JOIN builds ON DATE(builds.submittime) = DateTable.Date
WHERE DateTable.Date >= DATE_SUB(CURDATE(), INTERVAL 30 day) 
GROUP BY MONTH(submittime), DAY(submittime);
...