mysql查询一周内数据并分组_mysql 统计本周7天的数据并分组

在项目中需要展示本周七天的访客数量,通过MySQL的DATEDIFF方法和自定义函数实现动态获取指定天数前的数据统计。首先创建一个函数获取指定天数前的数据计数,然后利用Java获取当前是周几,根据周几来填充数据,确保未到的日期显示为0。最后将数据以Map形式返回给前端。
摘要由CSDN通过智能技术生成

今天写到项目的一个数据展示模块,最终要呈现的效果是用柱状图显示本周七天的访客数量,所以要给前端本周7天的数据

比如今天是周二(实际上也是),我们要给前端周一周二的数据,后面周三到周日因为还没到,数据置0

在网上找了一些相关信息,都是用sql语句直接查询最近七天的数据的方法,这样导致一个问题,我们再假设今天是周二,那么统计的就是上周二到今天的数据,然而我实际上并不需要上周的数据

这里说一下我自己的解决方法,首先我们了解一下mysql的DATEDIFF方法,它会返回两个date数据之间的天数,比如DATEDIFF(‘2019-8-13‘ , ‘2019-8-14‘),返回的结果是1

于是我们先写一个函数

@Select("SELECT count(id) FROM strange_record WHERE DATEDIFF( date_format( now( ) , ‘%Y-%m-%d‘ ) , date_format( time, ‘%Y-%m-%d‘ ) ) = #{day}")int getStrangeNumBeforeSomeDays(int day);

如果参数day=1,函数将返回1天前的数据统计值

然后我们获取今天是周几

public static intgetWeekday(){

Date today= newDate();

Calendar c=Calendar.getInstance();

c.setTime(today);int weekday=c.get(Calendar.DAY_OF_WEEK);if(weekday==1)return 7;else return weekday-1;

}

一般来说,到weekday这里,已经是java常用的获取当前日期的星期数的方法了,但是java中返回的1是周日,以此类推,7是周六,按照我们自己的习惯,我进行了一下改动,1-7分别表示周一到周日

然后是一个简单的数据处理

@Overridepublic MapgetStrangeNumCurWeek() {

Map data = new HashMap<>();for(int i=1;i<=7;i++){

data.put(String.valueOf(i),0);

}int weekday =DateTimeUtil.getWeekday();for(int i=1;i<=weekday;i++){

data.put(String.valueOf(i),monitorIndexDao.getStrangeNumBeforeSomeDays(weekday-i));

}returndata;

}

最后呈现的效果就是这样的

3eaab1fceae8a11e075db9e84dd7a6b6.png

原文:https://www.cnblogs.com/suru723/p/11345700.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值