对于这个问题,网上找了很多示例,绝大部分都是 依赖于创建的时间表然后进行外连接解决
废话不多说,上demo
1.数据库中选择任意一个有数据的表,例如我选择的是 ak_customer表
```
SELECT @cdate := DATE_ADD( @cdate, INTERVAL - 1 DAY ) date, 0 AS day_count
FROM ( SELECT @cdate := DATE_ADD( CURDATE( ), INTERVAL - 10 DAY ) FROM ak_customer ) t1 WHERE @cdate > '2021-06-03'
```
查询结果如下:
选择一统计时间开始时间,我的开始时间选择的是2021-06-03,结束时间默认是当前日期。2.将自己要统计的数据,按我们自己的要求写出来,当然此时,肯定显示的都是有数据的记录统计结果:
```
select DATE_FORMAT( create_time, '%Y-%m-%d' ) AS date ,COUNT(*) as day_count
from ak_customer group by date
```
查询结果如下:
此时没有记录的时间,就没有展示在结果中。3.联合查询将没有记录的时间补0
```
select date,Max(day_count) day_count from (
SELECT
@cdate := DATE_ADD( @cdate, INTERVAL - 1 DAY ) date,
0 AS day_count
FROM
( SELECT @cdate := DATE_ADD( CURDATE( ), INTERVAL - 10 DAY ) FROM ak_customer ) t1
WHERE
@cdate > '2021-06-03' union
select * from (
select DATE_FORMAT( create_time, '%Y-%m-%d' ) AS date ,COUNT(*) as day_count
from ak_customer group by date
)t2
) a GROUP BY date ASC
```
查询结果如下:
上面要求1、2 的记录条数字段名字一样,我选择的都是 day_count 结果就是没有数据的时间补上数据0了总结:当然还有别的方法,不过这个方法不用创建任何的存储过程,是相对来说简单一点的
网友评论