mysql按天,小時,半小時,N分鐘,分鐘進行數據分組統計

mysql按天,小時,半小時,N分鐘,分鐘進行數據分組統計
mysql不同時間粒度下的分組統計
按天統計
按小時統計
按半小時統計
按N分鐘統計
按分鐘統計
mysql不同時間粒度下的分組統計
我們在做項目或者數據分析時,經常遇到這樣的需求:統計不同時間粒度下的數據分佈情況,例如,每一天中每個小時網站的訪問量,某路口每半個小時通過的車輛數量等。對於此類的問題,一個sql簡單的查詢就能實現,故特此記錄下,方便以後使用。
在MySQL中,我的表爲:track
數據結構如下所示:


按天統計
SELECT DATE(TimeStart) AS date, COUNT(*) AS num
FROM track
WHERE Flag = 0 AND Duration >= 300 
GROUP BY date
ORDER BY date;
1
2
3
4
5
按小時統計
SELECT DATE_FORMAT(TimeStart, '%Y-%m-%d %H:00:00') AS time, COUNT(*) AS num
FROM track
WHERE Flag = 0 AND Duration >= 300
GROUP BY time
ORDER BY time;
1
2
3
4
5
結果如下:


按半小時統計
SELECT time, COUNT( * ) AS num 
FROM
    (
    SELECT Duration,
        DATE_FORMAT(
            concat( date( TimeStart ), ' ', HOUR ( TimeStart ), ':', floor( MINUTE ( TimeStart ) / 30 ) * 30 ),
            '%Y-%m-%d %H:%i' 
        ) AS time 
    FROM tarck
    WHERE Flag = 0  AND Duration >= 300 
    ) a 
GROUP BY DATE_FORMAT( time, '%Y-%m-%d %H:%i' ) 
ORDER BY time;
1
2
3
4
5
6
7
8
9
10
11
12
13
結果如下:


按N分鐘統計
將上面的SQL語句稍微修改下,就可以實現按任意N分鐘爲時間片的分組統計,如按10分鐘統計,先上代碼:

SELECT time, COUNT( * ) AS num 
FROM
    (
    SELECT Duration,
        DATE_FORMAT(
            concat( date( TimeStart ), ' ', HOUR ( TimeStart ), ':', floor( MINUTE ( TimeStart ) / 10 ) * 10 ),
            '%Y-%m-%d %H:%i' 
        ) AS time 
    FROM tarck
    WHERE Flag = 0  AND Duration >= 300 
    ) a 
GROUP BY DATE_FORMAT( time, '%Y-%m-%d %H:%i' ) 
ORDER BY time;
1
2
3
4
5
6
7
8
9
10
11
12
13
基本思路:
將datetime類型的時間轉化爲相應時間片的時間,例如將‘2017-03-01 01:08:19’ 轉化爲‘2017-03-01 01:00:00’,然後group by即可。

按分鐘統計
將按小時統計的SQL語句稍微修改下,就可以實現按分鐘統計

SELECT DATE_FORMAT(TimeStart, '%Y-%m-%d %H:%i:00') AS time, COUNT(*) AS num
FROM track 
WHERE Flag = 0 AND Duration >= 300
GROUP BY time
ORDER BY time;
1
2
3
4
5
DATE_FORMAT功能強大,可以根據format字符串格式化date值,參考下面鏈接
http://www.w3school.com.cn/sql/func_date_format.asp
參考博客:

https://blog.csdn.net/kaka_buka/article/details/52614643
https://blog.csdn.net/Beingccccc/article/details/78685490


轉發原文:https://blog.csdn.net/u010946448/article/details/83752984 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章