【发布时间】:2020-09-25 08:10:24
【问题描述】:
我有一个基于日期的项目表,其中许多项目在月份和年份之间存在间隔。例如,如果 1 月份创建了一个帖子,4 月份创建了 5 个帖子,那么我将在 2 月、3 月、5 月和 6 月有间隔。我一直在四处寻找,发现要做的一件事是使用数字表,或创建一个临时月份表,然后加入其中,但我似乎仍然无法让它工作。到目前为止,这是我所拥有的:
CREATE OR REPLACE TABLE temp_months (id INT unsigned PRIMARY KEY);
INSERT INTO temp_months
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12);
SELECT
COUNT(p.ID) AS COUNT,
YEAR(p.created_date) as YEAR,
tm.id as MONTH
FROM
temp_months tm
LEFT OUTER JOIN
my_table p
ON
MONTH(p.created_date) = tm.id
WHERE
p.company_id = 123456
GROUP BY
MONTH, YEAR
ORDER BY
p.created_date DESC
这给了我以下格式,有间隙(几乎就像我根本没有将它加入临时表一样)
+-------+------+-------+
| COUNT | YEAR | MONTH |
+-------+------+-------+
| 1 | 2020 | 5 |
| 3 | 2020 | 2 |
| 1 | 2020 | 1 |
| 9 | 2019 | 10 |
| 2 | 2019 | 8 |
+-------+------+-------+
我希望它喜欢做的是用空/null/0 COUNT 填补空白,例如:
+-------+------+-------+
| COUNT | YEAR | MONTH |
+-------+------+-------+
| NULL | 2020 | 6 |
| 1 | 2020 | 5 |
| NULL | 2020 | 4 |
| NULL | 2020 | 3 |
| 3 | 2020 | 2 |
| 1 | 2020 | 1 |
| NULL | 2019 | 12 |
| NULL | 2019 | 11 |
| 9 | 2019 | 10 |
| NULL | 2019 | 9 |
| 2 | 2019 | 8 |
| NULL | 2019 | 7 |
+-------+------+-------+
我只是不太确定我在哪里搞砸了。
【问题讨论】:
-
@Nick 我有两个设置,一个运行
10.3.14,一个运行10.3.23 -
您需要将
p.company_id = 123456条件移动到JOIN条件中,即LEFT OUTER JOIN my_table p ON MONTH(p.created_date) = tm.id AND p.company_id = 123456 -
解决这个问题,你就会接近,你可能仍然无法获得正确的年份。
-
我把它移到了那里,它仍然给我同样的结果
-
您删除了
WHERE子句,对吗?您可以发布一些示例my_table数据吗?