MySQL按時間統計資料的方法介紹(程式碼範例)

不言
發布: 2019-02-01 10:14:39
轉載
2346 人瀏覽過

這篇文章帶給大家的內容是關於MySQL按時間統計數據的方法介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

在做資料庫的統計時,常常會需要根據年、月、日來統計數據,然後配合echarts來製作視覺效果。

##想法

  • 按照時間維度進行統計的前提是需要資料庫中有保留時間信息,建議是使用

    MySQL自帶的datetime類型來記錄時間。

`timestamp` datetime DEFAULT NULL,
登入後複製
  • 在MySQL中對於時間日期的處理的函數主要是

    DATE_FORMAT(date,format)。可用的參數如下

格式#描述%a縮寫星期名稱%b#縮寫月名%c月,數值%D有英文前綴的月中的天%d月的天,數值(00-31)%e月的天,數值(0-31)%f微秒%H#小時(00-23) %h時(01-12)%I時(01-12)%i分鐘,數值(00-59)#%j年的天(001-366)#%k小時(0-23)#%l小時(1-12)%M月名#%m月,數值(00-12)%pAM 或PM#%r時間,12-小時(hh:mm: ss AM 或PM)%S秒(00-59)%s秒(00-59)%T時間, 24-小時(hh:mm:ss)%U#週(00-53) 星期日是一週的第一天#%u週(00-53) 星期一是一週的第一天%V週(01-53) 星期日是一週的第一天,與%X 使用#%v週(01-53) 星期一是一週的第一天,與%x 使用%W星期名%w週的天(0=星期日, 6=星期六)% X年,其中的星期日是周的第一天,4 位,與%V 使用#%x年,其中的星期一是周的第一天,4 位,與%v 使用%Y#年,4 位

    ## %y
  • 年,2 位

#:當涉及按日統計是,需要使用
    %j
  • ,而如果使用

    %d, %e, %w的話,那麼不同月份/周里的相同值會統計在一起。

涉及到取得目前時間,則可以透過

now()

sysdate()

來取得。
  • SELECT SYSDATE() FROM DUAL;
    SELECT NOW() FROM DUAL;
    登入後複製
    依照實際需求使用
  • group by
  • 查詢即可。

    結論

    需統計的表格結構如下:

    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中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!