Skip to content
Advertisement

MySQL 5: How to find the peak of customers during working time

I have table in MySQL with times spent by customers and I need to find the most busy 30 mins.

CREATE TABLE Customer
   (id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    customerId int NOT NULL,
    arrival datetime,
    leaving datetime);

INSERT INTO Customer
   (customerId, arrival, leaving)
VALUES
   (1, '2018-01-01 10:00:00', '2018-01-01 12:00:00'),
   (2, '2018-01-01 11:00:00', '2018-01-01 12:00:00'),
   (3, '2018-01-01 11:30:00', '2018-01-01 12:30:00'),
   (4, '2018-01-01 13:30:00', '2018-01-01 14:30:00')
;

Expected result is something like multiplerows with time and number of customers:

   10:00    10:30    1
   10:30    11:00    1
   11:00    11:30    2
   11:30    12:00    3
   12:00    12:30    1

I can easily make 5 sql queries and get the result (I made some view in similar problem https://stackoverflow.com/a/59478411/11078894 ), but I do not know how to get the result with 1 query.

Please how to make subintervals in MySQL? Thx

Advertisement

Answer

Thanks to the post from GMB I found the solution also for the SQL 5 Some view:

CREATE OR REPLACE VIEW changeTimeView AS
select arrival AS changeTime, 1 cnt from Customer
union all
select leaving, -1 from Customer
ORDER BY changeTime

After the view is created:

SELECT DISTINCT chT2.changeTime,  (SELECT SUM(chT1.cnt) FROM changeTimeView chT1 WHERE TIMEDIFF(chT1.changeTime,chT2.changeTime)<=0) FROM changeTimeView chT2

Result:

2018-01-01 10:00:00     1
2018-01-01 11:00:00     2
2018-01-01 11:30:00     3
2018-01-01 12:00:00     1
2018-01-01 12:30:00     0
2018-01-01 13:30:00     1
2018-01-01 14:30:00     0
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement