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