mysql查询过去24小时内每小时数据量的方法(精确到分钟)

目录
  • 项目场景:
  • 问题描述
  • 解决方案:
  • 附:Mysql 查询每小时数据的总数
  • 总结

项目场景:

获取过去24小时每小时数据量(没有为0)

问题描述

时间段要求精确到分钟,即:10.33 ~ 11.33,11.33~12.33……

解决方案:

第一步:获取24个时间点:

1.使用数据量一定大于24的表(可以是数据库自带的,也可以是自己项目的)

SET @i=-1;
SELECT DATE_SUB( NOW(),INTERVAL ( (@i:=@i+1) ) HOUR ) AS 'time'
FROM  mysql.help_category
WHERE @i<23

2.建一个24个数据量的表

SET @i=-1;
SELECT DATE_SUB( NOW(), INTERVAL((@i:=@i+1)) HOUR) AS 'time'
FROM
(SELECT *  FROM
	(SELECT '1' AS a UNION SELECT '2' UNION SELECT '3' UNION SELECT '4'   ) AS a
 	JOIN
	( SELECT  '1' UNION  '2' UNION SELECT '3' UNION SELECT '4' UNION SELECT '5' UNION SELECT '6' ) AS b
 ) AS c
 WHERE @i<23

NOW() 获取当前时间,也是最后一个时间节点

DATE_SUB() 函数从日期减去指定的时间间隔

INTERVAL 关键字可以用于计算时间间隔

HOUR 间隔类型(小时)

使用格式:DATE_SUB(date,INTERVAL expr type)

获取的时间点如下:

第二步:将要查询的表的时间向右偏移至整点,并查询时段内数据量:

将10.33 ~ 11.33之间的数据的时间,显示为:11.00~12.00

这样小时为11的数据就是原数据库中10.33 ~ 11.33的数据,方便之后的查询

SELECT DATE_FORMAT(DATE_SUB( create_time,INTERVAL MINUTE(NOW())-60 MINUTE ) ,'%Y-%m-%d %H') AS date, count(*) AS num
FROM mytable GROUP BY date

结果如下:

第二步:多表连接查询:

SET  @i=-1;
SELECT t.time, ifnull(num,0) AS count FROM
	(SELECT DATE_SUB( NOW(),INTERVAL ( (@i:=@i+1) ) HOUR ) AS 'time'
	FROM  mysql.help_category where @i<23)
AS t
LEFT JOIN
	(SELECT DATE_FORMAT(DATE_SUB( create_time,INTERVAL MINUTE(NOW())-60 MINUTE ) ,'%Y-%m-%d %H') AS date, count(*) AS num
	FROM mytable GROUP BY date )
AS sa
ON sa.date = DATE_FORMAT( t.time,'%Y-%m-%d %H')  GROUP BY t.time

结果如下:

count表示的是时间节点前一个小时的数据量,不包含此节点,如果要包含此节点,可以将上面的60改成59

附:Mysql 查询每小时数据的总数

1.通过sql查询每小时的数据总数,没有先不管

 SELECT
      hour(表_时间)  hour,
      count(表_id) count
    FROM 表_name
    //限制年月日(current_date  2022-03-05)
    WHERE  date_format(表_时间, '%Y-%m-%d') = current_date//格式化时间
    GROUP BY date_format(表_时间, '%Y%m%d-%H'), hour//按每小时分组

2.通过map,数组工具把没有数据的小时置为0;

总结

到此这篇关于mysql查询过去24小时内每小时数据量的文章就介绍到这了,更多相关mysql查询每小时数据量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql查询每小时数据和上小时数据的差值实现思路详解

    一.前言 需求是获取某个时间范围内每小时数据和上小时数据的差值以及比率.本来以为会是一个很简单的sql,结果思考两分钟发现并不简单,网上也没找到参考的方案,那就只能自己慢慢分析了. 刚开始没思路,就去问DBA同学,结果DBA说他不会,让我写php脚本去计算,,这就有点过分了,我只是想临时查个数据,就不信直接用sql查不出来,行叭,咱们边走边试. 博主这里用的是笨方法实现的,各位大佬要是有更简单的方式,请不吝赐教,评论区等你! mysql版本: mysql> select version(); +

  • MySQL 查询速度慢与性能差的原因与解决方法

    一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSecond意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS: 是 TransactionsPerSecond的缩写,也就是事务数/秒.它是软件测试结果的测量单位.客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数. Tips: 最好不要在主库上数据库备

  • MySQL如何统计一个数据库所有表的数据量

    目录 场景: 官网的解释: 补充:查询表大小 总结 场景: mysql统计一个数据库里所有表的数据量,最近在做统计想查找一个数据库里基本所有的表数据量,数据量少的通过select count再加起来也是可以的,不过表的数据有点多,不可能一个一个地查 记得在Navicat里,选择一个数据量,点击表,如图: 是可以看到所有表具体的数据行的 然后可以通过sql实现?在mysql里是可以查询information_schema.tables这张表的 SELECT table_rows,table_nam

  • mysql mysqldump只导出表结构或只导出数据的实现方法

    mysql mysqldump 只导出表结构 不导出数据 复制代码 代码如下: mysqldump --opt -d 数据库名 -u root -p > xxx.sql 备份数据库 复制代码 代码如下: #mysqldump 数据库名 >数据库备份名 #mysqldump -A -u用户名 -p密码 数据库名>数据库备份名 #mysqldump -d -A --add-drop-table -uroot -p >xxx.sql 1.导出结构不导出数据 复制代码 代码如下: mysq

  • Mysql Binlog快速遍历搜索记录及binlog数据查看的方法

    目标,开发人员说有个数据莫名其妙添加了,但是不知道是从哪里添加的,而且应用功能里面不应该添加这样的数据,为了查清楚来源,所以我就准备去binlog里面找了,但是binlog有好几个月的数,我这样一个个mysqlbinlog下去,也不是办法,所以想到准备用脚本循环来操作. 1,去binlog目录复制所有的binlog到临时目录/tmp/bl/ cp /home/data/mysql/binlog/mysql-bin.* /tmp/bl 2,写脚本遍历 [root@wgq_idc_dbm_3_61

  • mysql查询本周内每天统计量按天展示的示例代码

    目录 本周 前七天 本月 本年按月展示 本周 SELECT    b.item,IFNULL(a.COUNT,0) AS VALUE FROM (   SELECT  DATE(subdate(curdate(),date_format(curdate(),'%w')-1)) as item               union all               SELECT  DATE(DATE_ADD(subdate(curdate(),date_format(curdate(),'%w

  • MySql查询某个时间段内的数据实例(前一周、前三个月、前一年等)

    目录 1.使用函数DATE_SUB (1).前一周的数据 (2).前三个月的数据 (3).前一年的数据 2.使用函数DATE_ADD (1).前一周的数据 (2).前三个月的数据 (3).前一年的数据 总结 1.使用函数DATE_SUB DATE_SUB函数在当前时间减去一定的时间 DATE_SUB(date,INTERVAL expr unit) date:合法日期,可以是当前时间now() expr:希望减去的时间,整数 unit:减去时间的单位,如day,week,month,year 实

  • mysql如何查询某一时间段内没有卖出的商品

    前端时间,室友拿来一道关于mysql查询的问题: 有3张表: 1,zd_product 产品表 zp_id主键(产品id) inputtime(产品发布时间) 2,zd_order订单表 zp_id外键(产品id)zo_id主键(订单id) zo_voer_time( 订单完成时间) 3,zd_ord_pro产品订单表 zo_id外键(订单id)zp_id(产品id) 问:通过这3张表查找从产品发布到"一个月内""没有"被卖出过的产品? 在这里我也不说我们是如何讨论

  • MySQL查询语句大全集锦

    1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!) 4:查看现在的数据库中存在什么表 mysql> SHOW TABLES; 5:创建一个数据库表 mysql> CREATE TAB

  • mysql查询时offset过大影响性能的原因和优化详解

    前言 mysql查询使用select命令,配合limit,offset参数可以读取指定范围的记录.本文将介绍mysql查询时,offset过大影响性能的原因及优化方法. 准备测试数据表及数据 1.创建表 CREATE TABLE `member` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(10) NOT NULL COMMENT '姓名', `gender` tinyint(3) unsigned NOT NU

随机推荐