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