我想按日期计算项目数,但有时该表不包含带有某些日期的行,并且结果中有一个漏洞,例如:
+------------+--------+
| date | number |
+------------+--------+
| 2021-03-12 | 1 |
| 2021-03-15 | 1 |
| 2021-03-17 | 1 |
| 2021-03-18 | 1 |
+------------+--------+
我想要这个结果:
+------------+--------+
| date | number |
+------------+--------+
| 2021-03-12 | 1 |
| 2021-03-13 | 0 |
| 2021-03-14 | 0 |
| 2021-03-15 | 1 |
| 2021-03-16 | 0 |
| 2021-03-17 | 1 |
| 2021-03-18 | 1 |
+------------+--------+
所以,我创建了一个临时表WITH
,它可以工作:
WITH recursive Date_Ranges AS (
select DATE(NOW() - INTERVAL 3 MONTH) AS Date
union
select Date + interval 1 day
from Date_Ranges
where Date < DATE(NOW())
)
SELECT *, 0 AS number FROM Date_Ranges
接下来,我想检索统计信息,我尝试使用以下查询:
WITH recursive Date_Ranges AS (
select DATE(NOW()- INTERVAL 3 MONTH) AS Date
union
select Date + interval 1 day
from Date_Ranges
where Date < DATE(NOW())
)
select *, '0' AS value from Date_Ranges
UNION DISTINCT
SELECT DATE(time) AS date, count(*) AS number
FROM my_table
WHERE time >= NOW()- INTERVAL 3 MONTH
AND time <= DATE(NOW())
GROUP BY DATE(ca_time)
但是UNION
因为值不同所以不起作用,所以mysql保留2行:
example:
+------------+--------+
| date | number |
+------------+--------+
| 2021-03-12 | 0 |
| 2021-03-13 | 0 |
| 2021-03-14 | 0 |
| 2021-03-15 | 0 |
| 2021-03-16 | 0 |
| 2021-03-17 | 0 |
| 2021-03-18 | 0 |
| 2021-03-12 | 2 |
| 2021-03-13 | 6 |
| 2021-03-14 | 7 |
| 2021-03-15 | 8 |
| 2021-03-16 | 9 |
| 2021-03-17 | 5 |
| 2021-03-18 | 0 |
+------------+--------+
0 的行如何与第二个联合合并?
谢谢。
编辑:
我试过这个查询,但没有结果的日期不在这里:
WITH recursive dates AS (
SELECT DATE(NOW() - INTERVAL 3 MONTH) AS Date
UNION ALL
SELECT Date + interval 1 day
FROM dates
WHERE Date < DATE(NOW())
)
SELECT date, COALESCE(COUNT(1), 0) AS number
FROM dates
LEFT JOIN geo
ON dates.date = DATE(geo.ca_time)
WHERE departmentCode = '89'
GROUP BY geo.ca_time
ORDER BY geo.ca_time
结果:
+------------+--------+
| date | number |
+------------+--------+
| 2021-02-21 | 1 |
| 2021-02-22 | 11 |
| 2021-02-27 | 8 |
...