`

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得到不是5月31日,而是6月0日。那么统计前一天的日期就不能使用curdate()-1了,mysql数据库又有一个新方法统计前一天的数据。
统计前一天的日志sql语句:
select * from bean where date(log_time) = date_sub(curdate(),interval 1 day); 
括号中为当天时间的前一天,如果统计前几天就将括号中的’1’改成相应的天数。如果要算月或年,直接将day改为month或year即可
统计本周
要求: 统计从昨天开始统计前7天的日志包括昨天
select * from user where date(log_time) >= date_sub(curdate(),interval 7 day)   
and date(log_time) <=  date_sub(curdate(),interval 1 day) 
在网上找的使用week统计一周信息,只能统计到5天的信息,不符合要求,所以改用这种方法。
统计某一天
统计历史某一天的日志,将date_sub(curdate(),interval 0 day)函数中的curdate()替换为某一天的日期
比如:要统计2012-05-25日期的信息
date_sub('2012-05-25',interval 0 day)
关于date_sub()函数的例子:
今天是2013年5月20日。
date_sub('2012-05-25',interval 1 day) 表示 2012-05-24
date_sub('2012-05-25',interval 0 day) 表示 2012-05-25
date_sub('2012-05-25',interval -1 day) 表示 2012-05-26
date_sub('2012-05-31',interval -1 day) 表示 2012-06-01
date_sub(curdate(),interval 1 day) 表示 2013-05-19
date_sub(curdate(),interval -1 day) 表示 2013-05-21
date_sub(curdate(),interval 1 month) 表示 2013-04-20
date_sub(curdate(),interval -1 month) 表示 2013-06-20
date_sub(curdate(),interval 1 year) 表示 2012-05-20
date_sub(curdate(),interval -1 year) 表示 2014-05-20
按时间段统计:
这里要用到DATE_FORMAT函数,这个函数非常万能,如下例:
select * from user where DATE_FORMAT(log_time,'%H') >= '18' and DATE_FORMAT(log_time,'%H') < '19' and DATE_FORMAT(log_time,'%Y')='2014';      
意思不用我说,大家都知道,就是查询所有在18点到19点之间的,并且是2014年的数据。
Date_format可以使用的格式有:
格式 描述
%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 位

转自:http://www.yovisun.com/mysql-date-statistics.html
分享到:
评论

相关推荐

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

    如果需要获取某一天内每个小时的统计数据,可以使用`HOUR()`函数,例如: ```sql SELECT HOUR(trigger_time) as Hour, count(*) as Count FROM xxl_job_qrtz_trigger_log WHERE trigger_time BETWEEN '2018-02-05 ...

    mysql 统计一天24小时数据默认补0SQL

    ### MySQL 实现一天24小时数据统计并默认补0的方法 在进行数据分析时,我们经常会遇到需要统计一天内每个小时的数据情况。为了确保统计数据的完整性,对于那些在某小时内无记录的情况,通常需要将该小时的数据设为0...

    sqlserver/mysql按天、按小时、按分钟统计连续时间段数据【推荐】

    在SQL Server和MySQL数据库中,按天、按小时或按分钟统计连续时间段数据是一项常见的需求,这有助于分析数据峰值和趋势。以下是如何实现这一目标的详细步骤和知识点: 1. **master..spt_values表**: - `master.....

    Mysql 时间模糊查询

    **适用场景:**当需要按日期的年月日部分进行模糊匹配时。 ##### 2. 使用BETWEEN进行区间查询 这种方法适用于需要查询某个时间点位于两个时间点之间的场景。例如: ```sql SELECT * FROM table1 WHERE time ...

    mysql 获取规定时间段内的统计数据

    在MySQL数据库中,获取规定时间段内的统计数据是一项常见的任务,它对于数据分析、报表生成以及业务监控至关重要。本篇文章将深入探讨如何使用SQL语句从数据库中提取特定时间范围内的数据,并进行统计分析。 首先,...

    JAVA实现按时间段查询数据操作

    JAVA实现按时间段查询数据操作 本节主要介绍了JAVA实现按时间段查询数据操作的相关知识点,涵盖了JAVA语言的实践应用、时间段查询、数据操作等方面的知识。 一、JAVA语言基础知识 * JAVA是一种面向对象的编程语言...

    mysql中获取一天、一周、一月时间数据的各种sql语句写法

    总结,通过上述SQL语句,我们可以有效地在MySQL中获取特定时间段内的数据。在实际应用中,这些技巧对于数据分析、报表生成以及基于时间的查询非常有用。理解并熟练运用这些函数和操作,将极大地提升数据库管理的效率...

    mysql按照天统计报表当天没有数据填0的实现代码

    当我们使用`GROUP BY`语句按日期统计时,如果某一天没有数据,MySQL不会返回这一天的行,导致统计结果不完整。例如,统计10月3日至10月10日的数据,只有8号和10号有记录,其他日期则会被忽略。 2. **解决方案** ...

    MySql 按时间段查询数据方法(实例说明)

    时间格式为2008-06-16 查询出当天数据: SELECT * FROM `table` WHERE date(时间字段) = curdate(); 查询出当月字段: SELECT * FROM `table` WHERE month( 时间字段) = month( now( ) ) ; 时间格式为1219876…… ...

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

    前端时间,室友拿来一道关于mysql查询的问题: 有3张表: 1,zd_product 产品表 zp_id主键(产品id) inputtime(产品发布时间) 2,zd_order订单表 zp_id外键(产品id)zo_id主键(订单id) zo_voer_time( 订单完成...

    mysql基础查询案例(连接查询、时间日期查询、树形表查询、函数查询、日期统计案例)..docx

    例如,我们可以查询某一天或者某个时间段内的消费记录,并进行汇总统计。 - **按日统计消费总额**: ```sql SELECT DATE(`create_time`) AS `date`, SUM(consume_money) AS total FROM ms_consume GROUP BY `date`...

    MySql 5.1 参考手册.chm

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符...

    MySQL 5.1中文手冊

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符...

    根据输入的日期获取所属季度

    2. **数据分析**: 分析某一时间段内的数据时,按季度进行汇总统计。 3. **市场调研**: 市场部门可能会按季度分析市场趋势或消费者行为。 4. **项目管理**: 按季度评估项目进度和成果。 #### 六、扩展知识点 1. **...

    MySQL 5.1参考手册

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符...

    MySQL 5.1官方简体中文参考手册

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/(第 8/24 页)2006-11-02 19:12:13 MySQL 5.1 Reference ...

    MySQL 5.1参考手册 (中文版)

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符...

    MySQL 5.1参考手册中文版

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. ...

    MySQL日期加减函数详解

    例如,如果在大型数据表中查找特定日期范围内的记录,通过在`WHERE`子句中使用这些函数,可以直接定位到所需时间段,避免全表扫描。 总之,掌握这些MySQL日期和时间函数对于任何数据库管理员或开发人员来说都是至关...

Global site tag (gtag.js) - Google Analytics