1. 程式人生 > >關於SQL 每3分鐘一次的統計資料

關於SQL 每3分鐘一次的統計資料

由於碰到一個統計資料的問題,要求是按照時間每3分鐘統計一次數量。

環境:資料表裡有時間欄位,時間精確到(秒)級別,但是要3分鐘統計一次表中的資料量。

解決方法:

第一個方法,是分時間段統計,用case解決每個時間段都精確的寫出來。

但是表中的資料已經跨年了,這種方法僅適合統計的時間跨度比較大的情況(比如統計每年的資料量)。

第二個方法,把時間處理,思路是這樣的。

首先,將時間擷取到分鐘,然後將分鐘的時間“除3”取整(同樣合適按照一個小時60分鐘所有能整除的數,比如5分鐘、6分鐘、10分鐘、20分鐘、30分鐘等);

其次,將得到的時間處理成正常需要顯示的時間,因為上邊已經取整了,分鐘的資料縮小了3倍,需要在分鐘的基礎上乘3;

最後,將資料按照時間統計。

結束。

以mysql為例:

將時間擷取到分鐘,並整除,再拼接,concat(date_format(datetime,'%y-%m-%d %h:'),floor(date_format(datetime,'%i')/3)*3,':00');

得到的結果是將 datetime 欄位,不到3分鐘的時間全部都處理成整3分鐘。

即:2016-03-08 15:21:00 ~ 2016-03-08 15:23:59 之間的時間都 變成 2016-03-08 15:21:00,這樣,3分鐘以內的時間就變成同一個時間。

下一步統計就很簡單了吧,直接以時間統計需要統計的欄位就好了。

這種方法還適合很多其他時間段統計,只要是能整除該時間單位進位制的都行,比如24小時進位制的分2、3、4、6個小時統計。