MySQL 获取某个时间段每一天、每一个小时的统计数据

获取每一天的统计数据
做项目的时候需要统对项目日志做分析,其中有一个需求是获取某个给定的时间段内,每一天的日志数据,比如说要获取从2018-02-02 09:18:36到2018-03-05 23:18:36这个时间段内,统计出每一天的日志数据,一般情况下,看到这种需求都是考虑使用函数来搞定,直接上sql语句

SELECT
DATE_FORMAT(trigger_time, ‘%Y-%m-%d‘) triggerDay,
COUNT(id) triggerCount
FROM
`job_qrtz_trigger_log`
WHERE
trigger_time BETWEEN ‘2018-02-02 09:18:36‘
AND ‘2018-03-05 23:18:36‘
GROUP BY triggerDay
ORDER BY trigger_time;

对上面的sql做简单的解释

首先,查询字段这里,COUNT(id) triggerCount是我们需要的统计数据的条数,按照实际需求可以添加需要的字段。

DATE_FORMAT(trigger_time, ‘%Y-%m-%d‘) triggerDay
这个是将特定日期格式化成 YYYY-mm-dd 格式的日期。这里的格式用于后面的分组,所以按照不同的需求,可以自定义格式。

我的需求是获取每一天的日志数据,我就按照 年份-月份-日期 的格式进行分组然后通过count(*)得到。

如果获取某个月内每个月的数据量,就将格式改为

DATE_FORMAT(trigger_time, ‘%Y-%m‘)
当然,where条件需要能够匹配上格式,不能where条件限制到了日期,你却用月份分组。

mysql的日期输出格式列出来:

%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%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) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位

获取某天每个小时的统计数据
1、利用Mysql自带的HOUR函数处理

SELECT HOUR(trigger_time) as Hour,count(*) as Count
FROM xxl_job_qrtz_trigger_log
WHERE
trigger_time BETWEEN ‘2018-02-05 01:18:36‘
AND ‘2018-02-05 17:18:36‘
GROUP BY HOUR(trigger_time) ORDER BY Hour(trigger_time);

2、时间格式是时间戳的

SELECT (FROM_UNIXTIME(create_time/1000,‘%H‘)) AS h,count(1) from table_item where create_time >1570464000000 and create_time < 1570497070416 GROUP BY h ;

原文地址:https://www.cnblogs.com/panxiangfu/p/12432441.html

时间: 2024-11-05 17:41:36

MySQL 获取某个时间段每一天、每一个小时的统计数据的相关文章

MySQL 获取指定时间段的年月

# 在编写存储过程时,可能会遇到通过输入的时间,得出该时间段的年月 # 下面通过试图的方式解决该问题 # 思路: # 创建 年 . 月 的试图 # 这里创建2010~2020 年的年份 drop view if exists v_year; CREATE VIEW v_year AS (SELECT '2010' as yearname) UNION ALL (SELECT '2011') UNION ALL (SELECT '2012') UNION ALL (SELECT '2013') U

mysql查询特定时间段内的数据

SET FOREIGN_KEY_CHECKS=0; -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS t_user; CREATE TABLE t_user ( userId bigint(20) NOT NULL, fullName varchar(64) NOT NULL, userType varchar(16) NOT NULL, addedTime datetime NO

ORACLE获取某个时间段之间的月份列表

返回1-31,或者1-12,或者某个 select rownum   from dual   connect by rownum<31 就是connect by http://marcospring.iteye.com/blog/1721600 获取某个时间段之间的月份列表(示例返回2009-03到2010-03之间的月份列表) SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2009-03','YYYY-MM'),ROWNUM-1 ),'YYYY-MM') DAY_ID

mysql 获取当前日期及格式化[转]

MYSQL 获取当前日期及日期格式获取系统日期: NOW()格式化日期: DATE_FORMAT(date, format)注: date:时间字段format:日期格式 返回系统日期,输出 2009-12-25 14:38:59select now();输出 09-12-25select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59)%I, %i 两位数字形式的分( 00,

mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)

感谢:http://www.111cn.net/database/110/d45124323da8d2d87b80f78319987eda.htm 查看同主题的另一篇博客:http://blog.csdn.net/cleanfield/article/details/41447585 ------------------------------------------------------------------------------ 本季度的第一天 ,然后你可以把字符串再转换为日期. 方法

mysql获取group by的总记录行数方法

mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: 代码如下 复制代码 SELECT COUNT(*) from `table` WHERE ......; 查出符合条件的记录总数 代码如下 复制代码 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成: 代码如下 复

MySQL获取Schema表名和字段信息

MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,UPDATE_TIME, CHECK_TIME from information_schema.TABLES where TABLE_SCHEMA='t_shop' ; 获取字段名 select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NUL

MySql按日期时间段进行统计(前一天、本周、某一天、某个时间段)

在mysql数据库中,常常会遇到统计当天的内容.例如,在user表中,日期字段为:log_time 统计当天 sql语句为: select * from user where date(log_time) = curdate(); curdate()表示当天日期 统计前一天 如果表示前一天的数据,则不能使用curdate()-1,因为当日期为月初时,curdate()-1 日期就不是上一个月的月末日期. 例如:今天是6月1日,理论上curdate()-1为5月31日,但是curdate()-1得

mysql 获取当前日期及格式化

MYSQL 获取当前日期及日期格式获取系统日期: NOW()格式化日期: DATE_FORMAT(date, format)注: date:时间字段format:日期格式 返回系统日期,输出 2009-12-25 14:38:59select now();输出 09-12-25select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59)%I, %i 两位数字形式的分( 00,