mysql查一周空的数据给0_Mysql查询一段时间内数据,空数据默认为0

这篇博客介绍了如何在MySQL中查询一段时间内的每天数据量,当某天数据为空时,默认显示0。通过创建日期表并与数据表进行左连接查询实现,同时展示了使用MyBatis动态控制查询日期区间的做法。
摘要由CSDN通过智能技术生成

需求

查询一段时间内 每天数据量 ,没有数据默认为0

第一步:数据表查询

根据日期分组,查询 2020-12-20 ~ 2020-12-25 区间数据:

select count(*) count,DATE_FORMAT(ride_time,'%Y-%m-%d') ride_time

from tab_visitor_ride_record

where ride_time >= DATE_FORMAT('2020-12-20','%Y-%m-%d') and ride_time <= DATE_FORMAT('2020-12-25','%Y-%m-%d')

group by DATE_FORMAT(ride_time,'%Y-%m-%d')

结果只会出现已有日期的数据:

c219c817b7c27de81999498e772c0b24.png

以上结果显然是不符合需求的 ,那么就需要链接日期表进行关联查询

第二步: 日期表查询

日期表查询如下,需要指定开始日期以及查询日期天数

select date_add('2020-12-20',interval @i:=@i+1 day) as date

from (

select 1

union all select 1

union all select 1

union all select 1

union all select 1

union all select 1

) as tmp,

(select @i:= -1) t

结果返回 2020-12-20~2020-12-25 区间所有日期:

fc99ba0d7441662090427223f8ee447b.png

第三步:时间表/数据表关联查询

使用左外联接查询:

select d.date, IFNULL(T.count,0) count from

(

select date_add('2020-12-20',interval @i:=@i+1 day) as date

from (

select 1

union all select 1

union all select 1

union all select 1

union all select 1

union all select 1

) as tmp,

(select @i:= -1) t

) d

left join(

select count(*) count,DATE_FORMAT(ride_time,'%Y-%m-%d') ride_time

from tab_visitor_ride_record

where ride_time >= DATE_FORMAT('2020-12-20','%Y-%m-%d') and ride_time <= DATE_FORMAT('2020-12-25','%Y-%m-%d')

group by DATE_FORMAT(ride_time,'%Y-%m-%d')

) T on T.ride_time = d.date

GROUP BY d.date

结果如下:

7d4d213884f1c940c549fe3fd741db86.png

第四步:使用mybatis动态控制查询日期区间

首先要动态控制日期,就要知道范围内的日期个数,创建查询条件为数组:

private String[] days;

在service层计算:

//计算时间天数跨度

query.setDays(new String[(int) ((query.getEndTime().getTime() - query.getStartTime().getTime()) / (1000 * 60 * 60 * 24))]);

然后在mapper文件中通过foreach进行遍历:

select d.date, IFNULL(T.count,0) count

from

(

select date_add(DATE_FORMAT(#{startTime},'%Y-%m-%d'),interval @i:=@i+1 day) as date

from (

select 1

union all select 1

) as tmp,

(select @i:= -1) t

) d

left join (

/** 你自己的业务逻辑 */

)T on T.date = d.date

完结撒花🎉

本文地址:https://blog.csdn.net/qq_36843946/article/details/112373929

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值