2017-11-23 8 views
0

訪問者が到着した時点を示す訪問者データを含むMySqlテーブルがあります。時刻を合わせてデータを集計しようとしています。来場者数:今日の1時間あたりの訪問者数を集計するためのMySqlクエリ

+----------+---------------------------+---------------------------+ 
|visitor |entry_time     |exit_time     | 
+----------+---------------------------+---------------------------+ 
|a   |2017-11-20 11:30:00  |2017-11-20 14:15   | 
|b   |2017-11-20 10:30:00  |2017-11-20 11:20:00  | 
|c   |2017-11-20 09:50:00  |2017-11-20 17:05:00  | 
|d   |2017-11-20 10:00:00  |2017-11-20 13:25:00  | 
|e   |2017-11-20 12:40:00  |2017-11-20 16:30:00  | 
|f   |2017-11-20 13:20:00  |2017-11-20 15:20:00  | 
+----------+---------------------------+---------------------------+ 

私は、各時間の存在の訪問者の数を取得したいのですが:

+-----------------------+-------------------+ 
|time_of_day   |number_of_visitors | 
+-----------------------+-------------------+ 
|2017-11-20 08:00  |0     | 
|2017-11-20 09:00  |1     | 
|2017-11-20 10:00  |3     | 
|2017-11-20 11:00  |4     | 
|2017-11-20 12:00  |4     | 
|2017-11-20 13:00  |5     | 
|2017-11-20 14:00  |4     | 
|2017-11-20 15:00  |3     | 
|2017-11-20 16:00  |2     | 
|2017-11-20 17:00  |1     | 
+-----------------------+-------------------+ 

私は時間で終了するか、またはエントリの数をカウントするクエリを作成することができます

SELECT 
    str_to_date(date_format((`entry_time`),'%y-%M-%D %H:00:00'), '%Y-%M-%D %H:00:00') AS `time_of_day`, 
    COUNT(DISTINCT `visitors`) AS `number_of_visitors` 
FROM 
    `tbl_visitors` 
GROUP BY 1 

しかし、1日のうちのいつでも(および任意の曜日の)訪問者の総数を集計するクエリを作成することができませんでした。

+0

チャグループを設定する –

+1

カレンダーテーブルを作成します。そのテーブルで右ジョイン。 – jarlh

+0

この問題(null結果)の1つの側面は、表示上の問題であり、アプリケーションコードで最もよく処理されます。 – Strawberry

答えて

0

SELECT 
    h.hour_of_day, 
    COUNT(DISTINCT v.visitor) AS number_of_visitors 
FROM tbl_calendar_hours h 
LEFT JOIN tbl_visitors v ON v.entry_time>=h.hour_of_day AND v.entry_time<DATE_ADD(h.hour_of_day,INTERVAL 1 HOUR) 
WHERE h.hour_of_day BETWEEN '2017-11-20 08:00' AND '2017-11-20 12:00' -- report for period 
GROUP BY h.hour_of_day 
ORDER BY h.hour_of_day 

SQLフィドルをカレンダーテーブル

CREATE TABLE tbl_calendar_hours(
    hour_of_day datetime PRIMARY KEY 
); 

を挿入し、このテーブル

INSERT tbl_calendar_hours(hour_of_day)VALUES 
('2017-01-01 00:00'), 
... 
('2017-11-20 08:00'), 
('2017-11-20 09:00'), 
('2017-11-20 10:00'), 
('2017-11-20 11:00'), 
('2017-11-20 12:00'), 
('2017-11-20 13:00'), 
('2017-11-20 14:00'), 
('2017-11-20 15:00'), 
('2017-11-20 16:00'), 
('2017-11-20 17:00'), 
... 
('2017-12-31 23:00'); 

時間と必要なすべての日付を作成して、クエリでそれを使用する - http://sqlfiddle.com/#!9/c54427/12

+0

結合は '' 'v.exit_time> h.hour_of_dayとv.entry_time

関連する問題