У меня есть таблица, в которой хранятся все даты входа и выхода пользователя из системы, а также количество часов, проведенных пользователем на платформе.
С учетом этого я хочу вычислить:
- Среднесуточная продолжительность пользователя на платформе
- Ежедневная сумма продолжительности всех пользователей на платформе
Это запрос MySQL, который я начал строить:
SELECT
date(login_datetime) as "Login Date"
round(avg(hourslapsed),0) as "Avg Daily Hours",
sum(hourslapsed) as "Total Daily Hours"
FROM lapsed_table
GROUP BY "Login Date"
Это пример lapsed_table, который у меня сейчас есть:
id date(login_datetime) login_datetime logout_datetime timestampdiff(hour, login_datetime, logout_datetime) as "hourslapsed"
-- -------------------- -------------- --------------- ----------------------------------------------------
1 Oct 1 Oct 1 10 am Oct 4 5pm 79
2 Oct 3 Oct 3 11pm Oct 5 1am 26
ВышеЗапрос был составлен исходя из предположения, что пользователи не будут тратить на платформу более 24 часов, а в редком случае это будет не более 24 часов, поэтому я сделал GROUP BY «Дата входа».Длительности, которые охватывают две разные даты (т.е. с 23:00 до 02:00 -> 3 часа), также учитываются под датой входа в систему.
ОДНАКО, это проблема, потому что пользователи оставили платформу запущенной без выхода из системы, что дало диапазон продолжительности более многих дней.
Как расширить таблицу выше, чтобы создать что-то подобное?
id date timestampdiff(hour, login_datetime, logout_datetime) as "hourslapsed"
<hr>
1 Oct 1 14
1 Oct 2 24
1 Oct 3 24
1 Oct 4 17
2 Oct 3 1
2 Oct 4 24
2 Oct 5 1
Является ли расширение таблицы lapsed_table, а затем подсчитывает ежедневную среднюю и общую сумму лучшим способом для этого?В конечном итоге я хочу создать что-то вроде этого:
Date Avg Daily Hours Total Daily Hours
---- --------------- -----------------
Oct 1 14 14
Oct 2 24 24
Oct 3 12.5 25
Oct 4 20.5 41