2017-09-10 10 views
0

グラフを作成して、1時間ごとのパフォーマンスを確認したいと考えています。MySQLで1時間ごとにデータをグループ化する方法

ここでは、テーブルの:

id | clicks | timestamp 
------------------------------ 
1 | 1  | 2017-05-15 16:05:03 
2 | 1  | 2017-05-15 16:05:01 
3 | 2  | 2017-05-15 17:05:37 
4 | 1  | 2017-05-15 18:21:00 
5 | 1  | 2017-05-16 14:44:47 
6 | 3  | 2017-05-16 14:45:04 
7 | 1  | 2017-05-17 08:40:52 
8 | 1  | 2017-05-17 08:40:56 
9 | 2  | 2017-05-17 08:36:35 

所望の出力:

id | clicks | timestamp 
------------------------------ 
1 | 0  | 01:00:00 
2 | 0  | 02:00:00 
3 | 0  | 03:00:00 
4 | 0  | 04:00:00 
5 | 0  | 05:00:00 
6 | 0  | 06:00:00 
7 | 0  | 07:00:00 
8 | 4  | 08:00:00 
9 | 0  | 09:00:00 
10 | 0  | 10:00:00 
11 | 0  | 11:00:00 
12 | 0  | 12:00:00 
13 | 0  | 13:00:00 
14 | 4  | 14:00:00 
15 | 0  | 15:00:00 
16 | 2  | 16:00:00 
17 | 2  | 17:00:00 
18 | 1  | 18:00:00 
19 | 0  | 19:00:00 
20 | 0  | 20:00:00 
21 | 0  | 21:00:00 
22 | 0  | 22:00:00 
23 | 0  | 23:00:00 
00 | 0  | 00:00:00 

私は必要なものは何もクリックがない場合はクリックに番号0を入れて24時間に一日を分割することです。たとえば、22:00:00のクリック数には、22:00:00 - 22:59:59が含まれます。

どのようにグループ化することができますか?私は 'GROUP BY HOUR(タイムスタンプ)'にしようとしましたが、それは私に望ましい結果を与えていませんでした。

+0

MariaDBとして、静的テーブルや組合を釜タスクが容易になります気の利いた「配列表」を持つことができます時間の24のためのテーブルを必要としています。 –

答えて

0

あなたは金升が

select t.id, sum(ifnull(a.click,0), hour(a.timestamp) from (

    select 1 as id, O as my_order 
    from dual 
    union 
    select 2, 1 
    from dual 
    union 
    select 3, 2 
    from dual 
    union 
    ..... 

    select 00, 24 
    from dual) t 
    left join my_table a on t.id = a.id and a.date(timestamp) = your_date 

    group by t.id, hour(a.timestamp) 
    order by t.my_order 
関連する問題