表为:track
数据结构如下所示:

mysql按天,小时,半小时,N分钟,分钟进行数据分组统计 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

按天统计

1 SELECT DATE(TimeStart) AS date, COUNT(*) AS num
2 FROM track
3 WHERE Flag = 0 AND Duration >= 300 
4 GROUP BY date
5 ORDER BY date;

按小时统计

1 SELECT DATE_FORMAT(TimeStart, '%Y-%m-%d %H:00:00') AS time, COUNT(*) AS num
2 FROM track
3 WHERE Flag = 0 AND Duration >= 300
4 GROUP BY time
5 ORDER BY time;

结果:

mysql按天,小时,半小时,N分钟,分钟进行数据分组统计 随笔 第2张

按半小时统计

 1 SELECT time, COUNT( * ) AS num 
 2 FROM
 3     (
 4     SELECT Duration,
 5         DATE_FORMAT(
 6             concat( date( TimeStart ), ' ', HOUR ( TimeStart ), ':', floor( MINUTE ( TimeStart ) / 30 ) * 30 ),
 7             '%Y-%m-%d %H:%i' 
 8         ) AS time 
 9     FROM tarck
10     WHERE Flag = 0  AND Duration >= 300 
11     ) a 
12 GROUP BY DATE_FORMAT( time, '%Y-%m-%d %H:%i' ) 
13 ORDER BY time;

结果:

mysql按天,小时,半小时,N分钟,分钟进行数据分组统计 随笔 第3张

按N分钟统计

 1 SELECT time, COUNT( * ) AS num 
 2 FROM
 3     (
 4     SELECT Duration,
 5         DATE_FORMAT(
 6             concat( date( TimeStart ), ' ', HOUR ( TimeStart ), ':', floor( MINUTE ( TimeStart ) / 10 ) * 10 ),
 7             '%Y-%m-%d %H:%i' 
 8         ) AS time 
 9     FROM tarck
10     WHERE Flag = 0  AND Duration >= 300 
11     ) a 
12 GROUP BY DATE_FORMAT( time, '%Y-%m-%d %H:%i' ) 
13 ORDER BY time;

思路:将datetime类型的时间转化为相应时间片的时间,例如将‘2017-03-01 01:08:19’ 转化为‘2017-03-01 01:00:00’,然后 group by即可。

按分钟统计

1 SELECT DATE_FORMAT(TimeStart, '%Y-%m-%d %H:%i:00') AS time, COUNT(*) AS num
2 FROM track 
3 WHERE Flag = 0 AND Duration >= 300
4 GROUP BY time
5 ORDER BY time;
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄