【MySQL】覚えておくと便利!時間別集計系クエリ(時/分)

Mysql-1

2012年09月11日(火)

この業界にいるとおそらく一度は必ず使用するであろう集計クエリです。 特にありそうな時間別集計のサンプルを、自分に対しての備忘録がてらに綴ろうかと思います。 今回紹介するのは、時間帯(hour)と時間帯(minute)で集計するパターンです。 1時間ごとの集計や、15分毎集計等も紹介するので参考までに。    

  では早速紹介させて頂きます。 また、今回は2つのパターンで少しジャンルが違うやり方でやっている方法を見つけたので、それぞれ紹介させて頂きます。  


  まず、テーブル構造はサンプルで以下のようにしようかと思います。

大体テーブルに1つは時間のカラムを含ませると思うので、 その際はフレキシブルに使用してみてください。

  □サンプルテーブル構造

mysql->desc trn_sample_log | [Field] | [Type] | | id | int(11) | | comment | text | | status | int(11) | | create | datetime |


    ■月毎に集計する方法

select DATE_FORMAT('create','%Y/%m') as _date, count(id) as _count
from trn_sample_log
group by _date


  ※DATE_FORMATを使い、強制的に対象とするDATEを作成するやり方。   ■日毎に集計する方法

select DATE_FORMAT('create','%Y/%m/%d') as _date, count(id) as _count
from trn_sample_log
group by _date


  ※DATE_FORMATを使い、強制的に対象とするDATEを作成するやり方。   ■1時間毎に集計する方法

select DATE_FORMAT('create','%Y/%m/%d %k:00') as _date, count(id) as _count
from trn_sample_log
group by _date


  ※DATE_FORMATを使い、強制的に対象とするDATEを作成するやり方。


  ■30分毎に集計する方法

SELECT FROM_UNIXTIME(TRUNCATE(UNIX_TIMESTAMP('create')/1800,0)*1800) as _time,count(*) as _count
FROM trn_sample_log
GROUP BY _time,member_id


  ※DATEを強制的にunixtimeに変換し、対象の時間帯で分割して行う方法   ■15分毎に集計する方法

SELECT FROM_UNIXTIME(TRUNCATE(UNIX_TIMESTAMP('create')/900,0)*900) as _time,count(*) as _count
FROM trn_sample_log
GROUP BY _time


  ※DATEを強制的にunixtimeに変換し、対象の時間帯で分割して行う方法    


どうでしょうか? 結構使いやすく、色々カスタマイズできそうですよね? これがあれば、基礎は大体使いまわしてできちゃうと思いまふ。 集計には色々あると思うので、 その際はこちらを基盤にカスタマイズしてみてください。

※偉そうに書いておりますが、詳細な意味は対して理解していません。ww 大体正常に動けばそれで良い!!!www  


ではまの更新の機会に是非!!

スポンサードリンク

運営サービスPR

スポンサードリンク

運営サービスPR