MySql 查询 : include days that have COUNT(id) == 0 but only in the last 30 days

标签 mysql sql aggregate-functions datetime-generation

我正在执行一个查询,以从我们的数据库中获取过去 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);

最佳答案

您需要一个日期表,然后左连接到构建表。

像这样:

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);

关于MySql 查询 : include days that have COUNT(id) == 0 but only in the last 30 days,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6845775/

相关文章:

php - PHP格式化类的设计以及提高性能和速度

MySQL "ERROR 1005 (HY000): Can' t 创建表 'foo.#sql-12c_4' (errno : 150)"

sql - Spark scala : SELECT in a foreach loop returns java. lang.NullPointerException

php - MySQL复杂多表计数

sql - 对非嵌套数组进行字符串操作后过滤行

sql - 如何根据值限制返回的列?

php - MySQL在一个ID下连接多行

mysql - 添加 Where 子句以查询偏斜结果集

java - Java 中的 Oracle 等效排序

mysql - 仅选择不唯一的行 [MySQL]