2017-11-23 1 views
0

방문자 데이터가있는 MySql 테이블이 있는데 방문자가 도착한 시점과 남은 시간을 표시하며 시간을 기준으로 데이터를 집계하여 시각화 할 수 있습니다. 방문자 수 :하루 중 시간별 현재 방문자 수를 집계하는 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 

하지만 현재 하루 중 언제든지 (및 요일별로) 총 방문자 수를 집계하는 쿼리를 만들 수 없었습니다.

+0

차 그룹 번호 : –

+1

달력 표를 만듭니다. 저 테이블과 오른쪽 조인. – jarlh

+0

이 (null 결과)의 한 측면은 응용 프로그램 코드에서 가장 잘 처리되는 디스플레이 문제입니다. – 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