Расчет времени сеанса в sql - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть таблица событий в mysql с двумя столбцами: UserId, EventTime (datetime).Мне нужно рассчитать для каждого UserId две вещи:

  1. Количество сессий
  2. Сумма длин сессий

Окончание сеанса определяется двумя минутами, которыедля этого пользователя не было никаких событий.

Как я могу написать такой запрос?

Так, например, для этого пользователя в прикрепленном изображении количество сеансов будет равно 2, сумма длительностей сеансов будет равна 2 минутам, и34 секунды

enter image description here

1 Ответ

0 голосов
/ 26 апреля 2018

Это боль в MySQL.Один метод использует коррелированный подзапрос для определения запусков, а затем переменные для присвоения номера сеансу:

select e.*,
       (@s := if(@u <> userid or eventtime > prev_et + interval 2 minute, @s + 1
                 if(@u := userid, @s, @s)
                )
       ) as session_id
from (select e.*,
             (select max(e2.eventtime) from events e2 where e2.userid = e.userid and e2.eventtime < e.eventtime
             ) as prev_et
      from events e
      order by userid, eventtime
     ) e cross join
     (select @u := 1, @s := 0) params;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...