mysql 占比函数_MySQL 函数

需求:将数据库中每分钟一条的数据表,从 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

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');

宋新峰

宋新峰

son***nfeng1024@126.com2年前 (2019-03-05)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值