全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

MYSQL每隔10分钟进行分组统计的实现方法

前言

本文的内容主要是介绍了MYSQL每隔10分钟进行分组统计的实现方法,在画用户登录、操作情况在一天内的分布图时会非常有用,之前我只知道用「存储过程」实现的方法(虽然执行速度快,但真的是太不灵活了),后来学会了用高级点的「group by」方法来灵活实现类似功能。

正文:

-- time_str '2016-11-20 04:31:11'
-- date_str 20161120

select concat(left(date_format(time_str, '%y-%m-%d %h:%i'),15),'0') as time_flag, count(*) as count from `security`.`cmd_info` where `date_str`=20161120 group by time_flag order by time_flag; -- 127 rows

select round(unix_timestamp(time_str)/(10 * 60)) as timekey, count(*) from `security`.`cmd_info` where `date_str`=20161120 group by timekey order by timekey; -- 126 rows

-- 以上2个SQL语句的思路类似——使用「group by」进行区分,但是方法有所不同,前者只能针对10分钟(或1小时)级别,后者可以动态调整间隔大小,两者效率差不多,可以根据实际情况选用

select concat(date(time_str),' ',hour(time_str),':',round(minute(time_str)/10,0)*10), count(*) from `security`.`cmd_info` where `date_str`=20161120 group by date(time_str), hour(time_str), round(minute(time_str)/10,0)*10; -- 145 rows

select concat(date(time_str),' ',hour(time_str),':',floor(minute(time_str)/10)*10), count(*) from `security`.`cmd_info` where `date_str`=20161120 group by date(time_str), hour(time_str), floor(minute(time_str)/10)*10; -- 127 rows (和 date_format 那个等价)

select concat(date(time_str),' ',hour(time_str),':',ceil(minute(time_str)/10)*10), count(*) from `security`.`cmd_info` where `date_str`=20161120 group by date(time_str), hour(time_str), ceil(minute(time_str)/10)*10; -- 151 rows

&

DELIMITER //

DROP PROCEDURE IF EXISTS `usp_cmd_info`;

CREATE PROCEDURE `usp_cmd_info`(IN dates VARCHAR(12))
BEGIN
 SELECT count(*) from `cmd_info` where `time_str` BETWEEN CONCAT(dates, " 00:00:00") AND CONCAT(dates, " 00:10:00") INTO @count_0;
 SELECT count(*) from `cmd_info` where `time_str` BETWEEN CONCAT(dates, " 00:10:00") AND CONCAT(dates, " 00:20:00") INTO @count_1;
 ...
 SELECT count(*) from `cmd_info` where `time_str` BETWEEN CONCAT(dates, " 23:40:00") AND CONCAT(dates, " 23:50:00") INTO @count_142;
 SELECT count(*) from `cmd_info` where `time_str` BETWEEN CONCAT(dates, " 23:50:00") AND CONCAT(dates, " 23:59:59") INTO @count_143;
 select @count_0, @count_1, @count_2, @count_3, @count_4, @count_5, @count_6, @count_7, @count_8, @count_9, @count_10, @count_11, @count_12, @count_13, @count_14, @count_15, @count_16, @count_17, @count_18, @count_19, @count_20, @count_21, @count_22, @count_23, @count_24, @count_25, @count_26, @count_27, @count_28, @count_29, @count_30, @count_31, @count_32, @count_33, @count_34, @count_35, @count_36, @count_37, @count_38, @count_39, @count_40, @count_41, @count_42, @count_43, @count_44, @count_45, @count_46, @count_47, @count_48, @count_49, @count_50, @count_51, @count_52, @count_53, @count_54, @count_55, @count_56, @count_57, @count_58, @count_59, @count_60, @count_61, @count_62, @count_63, @count_64, @count_65, @count_66, @count_67, @count_68, @count_69, @count_70, @count_71, @count_72, @count_73, @count_74, @count_75, @count_76, @count_77, @count_78, @count_79, @count_80, @count_81, @count_82, @count_83, @count_84, @count_85, @count_86, @count_87, @count_88, @count_89, @count_90, @count_91, @count_92, @count_93, @count_94, @count_95, @count_96, @count_97, @count_98, @count_99, @count_100, @count_101, @count_102, @count_103, @count_104, @count_105, @count_106, @count_107, @count_108, @count_109, @count_110, @count_111, @count_112, @count_113, @count_114, @count_115, @count_116, @count_117, @count_118, @count_119, @count_120, @count_121, @count_122, @count_123, @count_124, @count_125, @count_126, @count_127, @count_128, @count_129, @count_130, @count_131, @count_132, @count_133, @count_134, @count_135, @count_136, @count_137, @count_138, @count_139, @count_140, @count_141, @count_142, @count_143;
END //

DELIMITER ;

show PROCEDURE status\G

CALL usp_cmd_info("2016-10-20");

上面的这段MySQL存储过程的语句非常长,不可能用手工输入,可以用下面的这段Python代码按所需的时间间隔自动生成:

import datetime

today = datetime.date.today()
# 或 由给定格式字符串转换成
# today = datetime.datetime.strptime('2016-11-21', '%Y-%m-%d')

min_today_time = datetime.datetime.combine(today, datetime.time.min) # 2016-11-21 00:00:00
max_today_time = datetime.datetime.combine(today, datetime.time.max) # 2016-11-21 23:59:59

sql_procedure_arr = []
sql_procedure_arr2 = []
for x in xrange(0, 60*24/5, 1):
  start_datetime = min_today_time + datetime.timedelta(minutes = 5*x)
  end_datetime = min_today_time + datetime.timedelta(minutes = 5*(x+1))
  # print x, start_datetime.strftime("%Y-%m-%d %H:%M:%S"), end_datetime.strftime("%Y-%m-%d %H:%M:%S")
  select_str = 'SELECT count(*) from `cmd_info` where `time_str` BETWEEN "{0}" AND "{1}" INTO @count_{2};'.format(start_datetime, end_datetime, x)
  # print select_str
  sql_procedure_arr.append(select_str)
  sql_procedure_arr2.append('@count_{0}'.format(x))
print '\n'.join(sql_procedure_arr)
print 'select {0};'.format(', '.join(sql_procedure_arr2))

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# mysql  # 每隔5分钟  # 分组  # 分组统计  # 按小时分组统计  # MySql如何按照日期进行分组统计  # MySQL按天分组统计一定时间内的数据实例(没有数据补0)  # mysql如何分别按年/月/日/周分组统计数据详解  # mysql如何分组统计并求出百分比  # mysql实现按照某个时间段分组统计  # Mysql出生日期转换为年龄并分组统计人数的方法示例  # mysql按天/小时/半小时/N分钟/分钟进行数据分组统计功能  # 这段  # 存储过程  # 的是  # 我只  # 可以用  # 所需  # 有所不同  # 实际情况  # 这篇文章  # 速度快  # 可以根据  # 转换成  # 活了  # 方法来  # 用户登录  # 每隔  # 自动生成  # 主要是  # 学会了  # 有疑问 


相关文章: 建站之星安装提示数据库无法连接如何解决?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  公司门户网站制作流程,华为官网怎么做?  魔方云NAT建站如何实现端口转发?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  制作宣传网站的软件,小红书可以宣传网站吗?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  如何快速重置建站主机并恢复默认配置?  教学网站制作软件,学习*后期制作的网站有哪些?  郑州企业网站制作公司,郑州招聘网站有哪些?  建站之星北京办公室:智能建站系统与小程序生成方案解析  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  一键网站制作软件,义乌购一件代发流程?  如何设置并定期更换建站之星安全管理员密码?  如何选择高性价比服务器搭建个人网站?  linux top下的 minerd 木马清除方法  如何在阿里云虚拟主机上快速搭建个人网站?  网站网页制作专业公司,怎样制作自己的网页?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  建站三合一如何选?哪家性价比更高?  济南企业网站制作公司,济南社保单位网上缴费步骤?  建站之星客服服务时间及联系方式如何?  如何实现建站之星域名转发设置?  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何快速搭建安全的FTP站点?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  建站之星24小时客服电话如何获取?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  定制建站哪家更专业可靠?推荐榜单揭晓  如何在IIS中新建站点并配置端口与物理路径?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  制作表格网站有哪些,线上表格怎么弄?  江苏网站制作公司有哪些,江苏书法考级官方网站?  建站之星导航配置指南:自助建站与SEO优化全解析  建站之星多图banner生成与模板自定义指南  建站上传速度慢?如何优化加速网站加载效率?  Swift中swift中的switch 语句  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  IOS倒计时设置UIButton标题title的抖动问题  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  常州企业建站如何选择最佳模板?  如何在景安服务器上快速搭建个人网站?  微信推文制作网站有哪些,怎么做微信推文,急?  宝塔新建站点为何无法访问?如何排查?  小建面朝正北,A点实际方位是否存在偏差?  定制建站如何定义?其核心优势是什么?  山东云建站价格为何差异显著? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。