Я хотел запросить помощь в достижении следующего сценария, у нас есть таблица, которая регистрирует активность пользователя и в одной строке;мы записываем время начала и окончания и вычисляем продолжительность, используя триггер mysql, когда время окончания обновляется в строке.
Ниже приводится структура таблицы
---------------------------------------------------
USERs Activity Table
---------------------------------------------------
created_at Event User Start_timestamp End_Timestamp Duration
------------------- --------- ------- ------------------- ------------------- --------
2018-11-20 18:01:22 LOGIN john.doe 2018-11-20 18:01:22 2018-11-20 19:01:22 3600
2018-11-20 18:01:22 LOGIN jane.miller 2018-11-20 18:10:03 2018-11-20 20:10:03 7200
2018-11-20 18:15:16 BREAK john.doe 2018-11-20 18:15:16 2018-11-20 18:33:47 300
2018-11-20 18:33:47 ONCALL john.doe 2018-11-20 18:33:47 2018-11-20 18:36:47 180
Мы хотим создать отчет, которыйможет дать нам 15-минутный интервал для всех пользователей, как показано ниже
---------------------------------------------------
Desired Result in 15 minutes time interval
---------------------------------------------------
Intervals User LOGIN TIME BREAK TIME CALL TIME
------------------- ---------- ---------- ---------- ---------
2018-11-20 18:00:00 john.doe 00:15:00 00:00:00 00:00:00
2018-11-20 18:00:00 jane.miller 00:04:57 00:00:00 00:00:00
2018-11-20 18:15:00 john.doe 00:15:00 00:00:00 00:00:00
2018-11-20 18:15:00 jane.miller 00:15:00 00:00:00 00:00:00
2018-11-20 18:30:00 john.doe 00:15:00 00:15:00 00:00:00
2018-11-20 18:30:00 jane.miller 00:15:00 00:00:00 00:00:00
2018-11-20 18:45:00 john.doe 00:15:00 00:03:15 00:03:00
2018-11-20 18:45:00 jane.miller 00:15:00 00:00:00 00:00:00
2018-11-20 19:00:00 john.doe 00:01:22 00:00:00 00:00:00
2018-11-20 19:00:00 jane.miller 00:15:00 00:00:00 00:00:00
2018-11-20 19:15:00 jane.miller 00:15:00 00:00:00 00:00:00
2018-11-20 19:30:00 jane.miller 00:15:00 00:00:00 00:00:00
2018-11-20 19:45:00 jane.miller 00:15:00 00:00:00 00:00:00
2018-11-20 20:00:00 jane.miller 00:10:03 00:00:00 00:00:00
------------------- ---------- ---------- ----------
Чего я не могу достичь, так это того, что у нас есть одна строка для каждого события, и если я получаю отчет на основе 15-минутного интервала, я получаюобщая длительность в зависимости от интервала, в котором началось событие, и неправильно отображать 30 минут времени с 15-минутным интервалом.Однако следует указать, например, 3 минуты в 1 интервале и 12 минут в другом;фактическое время, проведенное в каждом интервале.
Пожалуйста, сообщите, как этого можно достичь.Я также создал временную таблицу, которая заполняется 15-минутными интервалами, для которых я хочу, чтобы данные генерировались и использовались для объединений, но я не являюсь экспертом в SQL и нуждаюсь в помощи / совете от вас, ребята.
Ниже следуетзапрос, с которым я играл, но пока безуспешно.
SELECT
DATE_FORMAT(SEC_TO_TIME(TIME_TO_SEC(a.created_at) - TIME_TO_SEC(a.created_at) % (15 * 60)),"%Y-%m-%d %H:%i") AS time_interval
, a.user
, SEC_TO_TIME(IFNULL(SUM(CASE WHEN a.event = 'LOGIN' THEN a.duration END),0)) AS login_time
, SEC_TO_TIME(IFNULL(SUM(CASE WHEN a.event = 'BREAK' THEN a.duration END),0)) AS break_time
, SEC_TO_TIME(IFNULL(SUM(CASE WHEN a.event = 'ONCALL' THEN a.duration END),0)) AS talk_time
FROM users_activity AS a
WHERE a.created_at > '2018-11-20 00:00:00'
GROUP BY time_interval, a.user
ORDER BY time_interval DESC;
Скрипка SQL со схемой https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0d64482c499a07e9d1c7ec232915969e
Заранее спасибо.