MYSQL统计连续日期数据

问题

在日常使用中,需要统计每日的数据。但是实际情况下会有部分日期无数据(为0),如果按照使用group by按日聚集数据会导致数据为0的日期遗漏。

表结构如下:

数据如下:

 

 使用语句:

select 
    date_format(u.register_time, '%Y-%m-%d') as r_t , count(*) 
as 
    num 
from 
    `user` u 
group by 
    r_t

查询结果如下:

        

可以看到查询结果中只有存在数据的天数,若该天无记录则无法统计。

解决方法

修改语句如下:

select t1.ev_day, ifnull(u1.num, 0) as num  from
(
	select date_format(date_sub('2022-08-17'/*结束日期*/,interval t.help_topic_id day),'%Y-%m-%d') as ev_day
	from mysql.help_topic t, 
	(
		select TIMESTAMPDIFF(day, '2022-08-10'/*开始日期*/, '2022-08-17'/*结束日期*/)+1 as subday
	) as subdayt
	where t.help_topic_id < subdayt.subday
) as t1 left join 
(
	select date_format(u.register_time, '%Y-%m-%d') as r_t , count(*) as num from `user` u group by r_t
) as u1 on u1.r_t = t1.ev_day

查询结果如下:

 

无记录的天数结果为0,解决问题!

该方法借助了help_topic 表的help_topic_id字段,由于help_topic_id字段只有七百条左右,所以若天数跨度超过该字段的记录数,可选用其他合适的表(要保证借助的字段数值连续!)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值