рассчитать время выхода из системы в mysql - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть такая структура таблицы:

x

Регистрация времени в одном столбце на основе события. Но мне потребовалось одно полное событие в одном ряду.

Необходимые данные, как это:

y

1 Ответ

0 голосов
/ 30 апреля 2020

Я бы отнесся к этому как к проблеме пробелов и островков.

Предполагая, что вы работаете MySQL 8.0, вы можете определить группы с суммой окон, которая увеличивается на 1 каждый раз, когда для данного пользователя наблюдается событие 'LOGIN':

select 
    user,
    min(event_date) login,
    min(case when event = 'LOGOUT' then event_date END) logout,
    timediff(min(case when event = 'LOGOUT' then event_date END), min(event_date)) total_time
from (
    select 
        t.*,
        sum(case when event = 'LOGIN' then 1 else 0 end) 
            over(partition by user order by event_date) grp
    from mytable t
) t
group by user, grp
order by user, login

Обратите внимание, что timediff() обрабатывает длительности, которые не превышают около 838 часов. В противном случае вам нужно использовать timestampdiff() или подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...