sql 查询时间段,有数据的显示出来,没有数据的补充0

对于这个问题,网上找了很多示例,绝大部分都是 依赖于创建的时间表然后进行外连接解决

废话不多说,上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了

总结:当然还有别的方法,不过这个方法不用创建任何的存储过程,是相对来说简单一点的

你可能感兴趣的:(sql 查询时间段,有数据的显示出来,没有数据的补充0)