Mysql数据处理,按照半小时汇总数据,

版权声明:本文章的所有内容,包括文字、图片,均为原创。转载请注明出处。作者首页:https://blog.csdn.net/songxinfeng1989 https://blog.csdn.net/songxinfeng1989/article/details/81906713

需求:将数据库中每分钟一条的数据表,从9:30取到22:00 ,以半小时为单位汇总,并输出excel。

数据表字段:id(序号)、incount(计数)、cdate(数据时间)

表名:m_temp

难点:时间处理

解决办法:使用DATE_FORMAT、CONCAT、Date、Hour、Minute、Floor函数将时间处理成半小时,在将这段时间的数据查询时 输出cdate统一变为  09:30,然后在group by cdate ,用sum(incount)求和。

1.处理时间:

示例:2018-08-21 09:30:00   至   2018-08-21 22:00:00

第一个半小时 09:30 至 10:00

将这段时间的数据查询时 输出cdate统一变为  09:30,然后在group by cdate ,sum(incount)

将分钟取出 /30  , 0-29分 结果为0 ,30-59分 结果为1 在乘以30 分钟即变为00 或者 30

扫描二维码关注公众号,回复: 4481869 查看本文章

date(cdate),取出年月日;

hour(cdate),取出小时;

minute(cdate),取出分钟;

计算(minute(cdate))/30 )*30,结果为0或30;

floor( (minute(cdate))/30 )*30), 处理成整数;

concat(date(cdate),' ',hour(cdate),':',floor( (minute(cdate))/30 )*30) ,按照日期格式进行拼接

DATE_FORMAT( concat(date(cdate),' ',hour(cdate),':',floor( minute(cdate)/30 )*30+12) ,'%Y-%m-%d %H:%i') ,转换成date类型

完整sql:

select sum(incount),dataStartTime from (
select incount, DATE_FORMAT( concat(date(cdate),' ',hour(cdate),':',floor( minute(cdate)/30 )*30+12) ,'%Y-%m-%d %H:%i')  as dataStartTime   
 from m_temp WHERE cdate>='2018-08-21 09:30' and cdate<='2018-08-21 22:00'  ORDER BY dataStartTime
) a
group by DATE_FORMAT( dataStartTime ,'%Y-%m-%d %H:%i')
into outfile('c:/2018-08-21Data.xls');

猜你喜欢

转载自blog.csdn.net/songxinfeng1989/article/details/81906713