这可能真的很容易,但我遇到了麻烦。我之前问了一个关于查询的问题(MySql Query help),答案是创建另一个表,并将其与我当前的查询连接起来。因此,我创建了一个临时表,并将其与我的查询连接在一起,但得到了相同的结果。
概述:我有一个dates表,其中包含过去30天的日期,每个条目的值都为0
+------+------------+
| Zero | Date |
+------+------------+
| 0 | 2011-07-27 |
| 0 | 2011-07-26 |
| 0 | 2011-07-25 |
| 0 | 2011-07-24 |
| 0 | 2011-07-23 |
| 0 | 2011-07-22 |
...etc我正在尝试将这个表与一个查询连接起来,我做了另一个表来获得这些结果:
+-------------------+-----------+
| Past-Month-Builds | Month-Day |
+-------------------+-----------+
| 53 | 6-27 |
| 103 | 6-28 |
| 91 | 6-29 |
| 70 | 6-30 |
| 76 | 7-1 |
| 8 | 7-2 |
| 77 | 7-5 |
| 111 | 7-6 |
| 67 | 7-7 |
| 70 | 7-8 |
| 2 | 7-9 |
| 3 | 7-10 |
| 87 | 7-11 |
| 53 | 7-12 |
| 49 | 7-13 |
| 84 | 7-14 |
| 126 | 7-15 |
| 3 | 7-16 |
| 8 | 7-17 |
| 98 | 7-18 |
| 114 | 7-19 |
| 841 | 7-20 |
| 206 | 7-21 |
| 738 | 7-22 |
| 2 | 7-23 |
| 65 | 7-25 |
| 39 | 7-26 |
| 21 | 7-27 |
+-------------------+-----------+请注意,有缺失的日期,我希望过去一个月的构建数列在当天没有任何构建时显示0。
下面是我尝试使用的查询:
SELECT
COUNT(id) AS 'Past-Month-Builds',
CONCAT(MONTH(builds.submittime), '-', DAY(builds.submittime)) as 'Month-Day'
FROM builds
RIGHT JOIN dates ON DATE(builds.submittime) = dates.Date
WHERE DATE(builds.submittime) >= DATE_SUB(CURDATE(), INTERVAL 30 day)
GROUP BY MONTH(submittime), DAY(submittime);有点迷路了,如果能帮上忙就太感谢了。
发布于 2011-07-28 02:48:34
更改查询,使dates成为主表,并使用指向builds表的left outer join。
另外,将与builds表相关的任何条件从WHERE子句移到ON子句,因为这是可选表。
https://stackoverflow.com/questions/6849555
复制相似问题