当前位置: 首页 > 后端技术 > PHP

SQL技巧-每隔几个小时分组

时间:2023-03-29 16:54:17 PHP

1.1准备数据数据表结构如下:数据如下:建表语句:【SQL】查看明文复制代码?创建表tb_user(idint(10)unsignednotnullauto_increment,usernamevarchar(255)notnull,addtimedatetimenotnull,primarykey(id))engine=innodbdefaultcharset=utf8;insertintotb_uservalues('1','zhangsan','2018-06-0101:27:03');insertintotb_uservalues('2','lisi','2018-06-0104:12:03');insertintotb_uservalues('3','wangwu','2018-06-0106:13:03');insertintotb_uservalues('4','zhaoliu','2018-06-0107:22:03');insertintotb_uservalues('5','sunqi','2018-06-0111:27:03');insertintotb_uservalues('6','wangba','2018-06-0114:55:03');insertintotb_uservalues('7','zhangjiu','2018-06-0116:28:03');insertintotb_uservalues('8','meishi','2018-06-0121:35:03');insertintotb_uservalues('9','百年子','2018-06-0123:01:03');insertintotb_uservalues('10','bikaqiu','2018-06-0104:55:03');insertintotb_uservalues('11','xiyangyang','2018-06-0106:22:03');insertintotb_uservalues('12','meiyangyang','2018-06-0107:25:03');insertintotb_uservalues('13','xiongda','2018-06-0111:09:03');insertintotb_uservalues('14','光头强','2018-06-0108:23:03');1.2按时间分组,需要用到mysql中的date_format函数DATE_FORMAT(date,format)根据格式字符串格式化一个日期值。以下说明符可用于格式字符串:说明符说明%a工作日的缩写名称(Sun..Sat)%b月份的缩写名称(Jan..Dec)%c数字形式的月份(0..12)%D带有英文后缀的月份日期(0th,1st,2nd,3rd,...)%d月份日期,数字(00..31)%e月份日期,数字(0..31)%f微秒(000000..999999)%H小时(00..23)%h小时(01..12)%I小时(01..12)%i分钟,数字形式(00..59)%j一年中的第几天(001..366)%k小时(0..23)%l小时(1..12)%M月份名称(January..December)%m月份,数字形式(00..12)%p上午(AM)或下午(PM)%r时间,12小时格式(小时hh:分钟mm:秒ss后跟AM或PM)%S秒(00..59)%s秒(00..59)%T时间,24小时格式(时hh:分mm:秒ss)%U周??(00..53),其中星期日为每周的第一天%u周(00..53)),其中星期一是一周的第一天%Vweeks(01..53),其中星期日是一周的第一天;和%X有%v周(01..53),其中星期一是一周的第一天;%W工作日名称(星期日..星期六)与%x%w星期几(0=星期日..6=星期六)一起使用%X星期几,其中星期日是一周的第一天,数字,4位数字;和%V同时使用%x是星期几,其中星期一是星期的第一天,数字形式,4位;%Y与%v同时使用年份,数字形式,4位%y年份,数字形式(2位)%%'%'文字字符sql语句:[SQL]纯文本查看复制代码?1selectusername,addtimefromtb_usergroupbydate_format(addtime,'%Y-%m-%d%H'),username;效果图:1.3如果请求是每2小时或者3小时,或者5小时需要div函数和divisible函数进行分组。用法如下:比如每隔5小时对上述数据进行一次分组,sql语句如下[SQL]纯文本查看复制代码?12selectusername,addtime,hour(addtime)div5fromtb_usergroupbydate_format(addtime,'%y-%m-%d'),hour(addtime)div5,用户名渲染: