mysql 按每天分组,然后再补上缺少的日期并将数据置为0

当需要按天分组数据并确保日期连续时,可以通过SQL实现。本文介绍了一种方法,使用RIGHT JOIN结合日期生成序列,即使原始数据中存在日期间隙,也能补全为0。示例查询展示了如何在MySQL中处理这个问题,并解释了SQL中的IFNULL和:=操作符的用法。
摘要由CSDN通过智能技术生成

简单按每天分组:

select  date_format(create_time, '%Y-%m-%d') as date  from aaa where 1=1 GROUP BY  date_format(create_time, '%Y-%m-%d')

 

但是可以发现日期是不连续的,根据某些业务场景,比如要绘制图表,不连续的日期肯定是不可以的,解决方法有很多。

可以在业务代码里进行处理,但是个人感觉有些麻烦,在sql里解决的网上也查到一些方法,有的是建立临时表,把从1970年开始的时间列表写进去,大约10万数据,感觉有点小题大做了。后来查到一个比较好的方法。

SELECT data.day,IFNULL(data.count, 0) as count1, day_list.day as date from 
(select DATE_FORMAT(cr.create_time, '%Y-%m-%d') day, count(cr.id) count from car_route cr GROUP BY day) data
right join 
(SELECT @date := DATE_ADD(@date, interval 1 day) day from 
(SELECT @date := DATE_ADD('2019-08-01', interval -1 day) from car_route cr)
 days LIMIT 31 ) day_list on day_list.day = data.day;

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值