1. 程式人生 > >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');