mysql 按照天数进行查询,并补全没有的日期

mysql 按照天数进行查询,并补全没有的日期

直接上代码

select
	days.v_time,
	ifnull(datas.v_count, 0) as v_count
from
	(
    -- 数据查询
	select
		date(tfi.create_time) as v_time, count(1) as v_count
	from
		t_fault_info tfi
	where
		tfi.create_time <= '2020-08-10'
		and tfi.create_time >= '2020-07-10'
	group by
		date(tfi.create_time)
	order by
		date(tfi.create_time))datas
-- 右连接
right join (
   	-- 日期查询
	select
		@date := date_add(@date, interval 1 day) as v_time
	from
		(
		select
			@date := date_add('2020-07-10', interval -1 day)
		from
			t_fault_info tfi ) days
	where
		@date <= date_add('2020-08-10', interval -1 day)
		and @date >= date_add('2020-07-10', interval -1 day)) days on
	datas.v_time = days.v_time
order by 
	days.v_time;

查询结果:

在这里插入图片描述
ps: 该方法有局限性,查询的最大天数被t_fault_info,即右连接表的大小限制了。如果查询天数不多,可以考虑用多表连接,笛卡尔乘积,来确定最大查询天数,如:

select * from (select 1 union select 2 union select 3) t1,(select 1 union select 2 union select 3) t2;

这个例子能查询的最大天数为3*3=9。

如果需要查询的天数很多,还是在JAVA代码里补全比较好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值