我们在用Mysql抽取数据时候,经常需要按照天、周、月等不同的粒度对数据进行分组统计。而我们的时间可能是“2017/12/5 0:0:0”这种准确的时间。所以在进行分组之前我们需要对时间进行一下处理。
DATE_FORMAT
是MySQL内置的一个函数,作用是以不同的格式显示日期/时间数据。具体的语法如下:
DATE_FORMAT(date,format)
,其中
date:合法的日期。format:规定日期/时间的输出格式,其中format可使用的格式见文末链接。
下面我们通过具体例子来看如何通过DATE_FORMAT进行分组统计:
下表两列分别代表产品买出的准确时间(精确到秒),和买出的产品类型。
start_time
|
product_no
|
2017/12/1 00:00:11
|
2A
|
2017/12/3 07:51:11
|
3C
|
2017/12/3 07:59:25
|
3C
|
2017/12/5 15:40:45
|
6C
|
现在我们需要对每天,每周,每月各个产品的销量进行统计,
1)按天统计:
select DATE_FORMAT(start_time,'
%Y%m%d
') days,count(product_no) count from test group by days;
2)按周统计:
select DATE_FORMAT(start_time,'
%Y%u
') weeks,count(product_no) count from test group by weeks;
3)按月统计:
select DATE_FORMAT(start_time,'
%Y%m
') months,count(product_no) count from test group bymonths;
参考文献:
format格式介绍
我们在用Mysql抽取数据时候,经常需要按照天、周、月等不同的粒度对数据进行分组统计。而我们的时间可能是“2017/12/5 0:0:0”这种准确的时间。所以在进行分组之前我们需要对时间进行一下处理。DATE_FORMAT是MySQL内置的一个函数,作用是以不同的格式显示日期/时间数据。具体的语法如下:DATE_FORMAT(date,format),其中date:合法的日...
带着问题去学习,我觉得是一种非常有效的学习方法,不知下面的几个问题是否也是你所需要考虑的:被
分组
的
日期
是否连续、
周
是以
周
日为起始日,还是以
周
一为起始日、
日期
跨年。在讨论
日期
查询的复杂性之前,我们有必要知道一些内建
日期
处理函数和
Date
/Time(
日期
/时间)数据类型,已经有一定了解的快速浏览下就好,直接去后半部分享用正餐。
表结构如下: qty
date
———————————————- 13 2005/01/17 15 2005/01/19 3 2005/01/25 105 2005/01/27 1 2005/01/31 352 2005/02/03 12 2005/02/04 255 2005/02/07 6 2005/02/18 1 2005/02/19 28 2005/02/21 1 2005/02/22 394 2005/02/23 359 2005/02/24 313 2005/02/25 325 2005/02/26 544 2005/02/27 68 2005/02/28 2 2005/03/01
目录前言
MySQL
DATE
_
FORM
AT() 函数
按日
期
分组
统计
按日
期
进行
数据
统计
,只是一个很常见的需求,下面我就介绍下在
MySQL
实现该功能的方法,先看一下下面的函数,该函数是我们实现
日期
统计
的核心
MySQL
DATE
_
FORM
AT() 函数
定义和用法
DATE
_
FORM
AT() 函数用于以不同的格式显示
日期
/时间数据。
DATE
_
FORM
AT(
date
,
form
at)
date
参数是合法的
日期
。
form
at 规定
日期
/时间的输出格式。
常用的格式有:
格式 描述
%Y 年,4
自然日
周
月
季年
分组
SELECT new_
date
as submit
Date
, ROUND(check_right/(check_count + check_add)*100,2) as rightRate, stat_time as statTime
SELECT
<choose>
<when test="fieldCollectIndexReq.statCycle == "Y"">
SELECT
DATE
_
FORM
AT(t.createTime,'%Y') as year ,
DATE
_
FORM
AT(t.createTime,'%c') as mon ,
t.createTime
FROM chat_session t
太多 就不一一列举了 ...
%M
月
名字(January……December);
%W 星期名字(Sunday……Saturday);
%D 有英语前缀的
月
份的
日期
(1st, 2nd, 3rd, 等等);
%Y 年, 数字, 4 位;
假设表中有一个字段time,格式为Unix时间戳,现需要按照该字段
统计
每天的记录数。
利用convert函数convert(char(10),time,120) as time,然后group by time即可。
原理:convert函数将时间戳转换成ODBC标准时间(120参数指定),然后取前十位,则刚好得到完整
日期
(不含时分秒),再
分组
即可。
按
月
,按年
分组
方法一样,只需要修改convert()方法第一个参数的长度。
您可能感兴趣的文章:
分组
后
分组
合计以及总计SQL语句(稍微整理了一下)SQL SERVER
分组
求和sql语句MY
写博客真实个费时费力的差事,好佩服那些博客阅读几十上百万的人。今天研究了半天按照
日期
分组
统计
,没有数据就为空了,我要让他显示0呀。想了办法,都没有找到一个好的,解决方案,然后用了一个很low的方法实现了,还是把它记录下来。方法是用于
mysql
,与开发语言无关。
1、案例中的数据结构和数据如下
2、在没有解决的时候,是这样的SELECT
date
(downtime) AS dday, count(*