這篇文章帶給大家的內容是關於MySQL按時間統計數據的方法介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
在做資料庫的統計時,常常會需要根據年、月、日來統計數據,然後配合echarts
來製作視覺效果。
資料庫:MySQL(推薦教學:MySQL教學)
##想法
MySQL自帶的
datetime類型來記錄時間。
`timestamp` datetime DEFAULT NULL,
DATE_FORMAT(date,format)。可用的參數如下
#描述 | |
---|---|
縮寫星期名稱 | |
#縮寫月名 | |
月,數值 | |
有英文前綴的月中的天 | |
月的天,數值(00-31) | |
月的天,數值(0-31) | |
微秒 | |
#小時(00-23) | |
時(01-12) | |
時(01-12) | |
分鐘,數值(00-59) | |
年的天(001-366) | |
小時(0-23) | |
小時(1-12) | |
月名 | |
月,數值(00-12) | |
AM 或PM | |
時間,12-小時(hh:mm: ss AM 或PM) | |
秒(00-59) | |
秒(00-59) | |
時間, 24-小時(hh:mm:ss) | |
#週(00-53) 星期日是一週的第一天 | |
週(00-53) 星期一是一週的第一天 | |
週(01-53) 星期日是一週的第一天,與%X 使用 | |
週(01-53) 星期一是一週的第一天,與%x 使用 | |
星期名 | |
週的天(0=星期日, 6=星期六) | |
年,其中的星期日是周的第一天,4 位,與%V 使用 | |
年,其中的星期一是周的第一天,4 位,與%v 使用 | |
#年,4 位 | |
年,2 位
%d, %e, %w的話,那麼不同月份/周里的相同值會統計在一起。
sysdate()
來取得。SELECT SYSDATE() FROM DUAL; SELECT NOW() FROM DUAL;
依照實際需求使用需統計的表格結構如下:
CREATE TABLE `apilog` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(64) DEFAULT NULL, `action` varchar(64) DEFAULT NULL, `params` text, `result` text, `timestamp` datetime DEFAULT NULL, PRIMARY KEY (`id`) )
action
的數量# 当日 SELECT action, COUNT(id) count FROM apilog WHERE DATE_FORMAT(`timestamp`,'%j') = DATE_FORMAT(now(),'%j') ORDER BY count desc; # 当周 SELECT action, COUNT(id) count FROM apilog WHERE DATE_FORMAT(`timestamp`,'%u') = DATE_FORMAT(now(),'%u') ORDER BY count desc; # 当月 SELECT action, COUNT(id) count FROM apilog WHERE DATE_FORMAT(`timestamp`,'%m') = DATE_FORMAT(now(),'%m') ORDER BY count desc; # 当年 SELECT action, COUNT(id) count FROM apilog WHERE DATE_FORMAT(`timestamp`,'%Y') = DATE_FORMAT(now(),'%Y') ORDER BY count desc;
統計某分類
action###的時間維度數量#### 按日 SELECT action, DATE_FORMAT(`timestamp`,'%j'), COUNT(id) count FROM apilog WHERE action = 'xxx' GROUP BY DATE_FORMAT(`timestamp`,'%j') # 按周 SELECT action, DATE_FORMAT(`timestamp`,'%u'), COUNT(id) count FROM apilog WHERE action = 'xxx' GROUP BY DATE_FORMAT(`timestamp`,'%u') # 按月 SELECT action, DATE_FORMAT(`timestamp`,'%m'), COUNT(id) count FROM apilog WHERE action = 'xxx' GROUP BY DATE_FORMAT(`timestamp`,'%m') # 按年 SELECT action, DATE_FORMAT(`timestamp`,'%Y'), COUNT(id) count FROM apilog WHERE action = 'xxx' GROUP BY DATE_FORMAT(`timestamp`,'%Y')###同時按###action###和時間維度統計###
# 按日 SELECT action, DATE_FORMAT(`timestamp`,'%j'), COUNT(id) count FROM apilog GROUP BY action, DATE_FORMAT(`timestamp`,'%j') # 按周 SELECT action, DATE_FORMAT(`timestamp`,'%u'), COUNT(id) count FROM apilog GROUP BY action, DATE_FORMAT(`timestamp`,'%u') # 按月 SELECT action, DATE_FORMAT(`timestamp`,'%m'), COUNT(id) count FROM apilog GROUP BY action, DATE_FORMAT(`timestamp`,'%m') # 按年 SELECT action, DATE_FORMAT(`timestamp`,'%Y'), COUNT(id) count FROM apilog GROUP BY action, DATE_FORMAT(`timestamp`,'%Y')#########以上就是比較常用的時間統計了,更多的時間維度,可以參考上面的參數表類似處理即可。 ############### ###
以上是MySQL按時間統計資料的方法介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!