@long_skinny_boy

Как посчитать общую длительность времени между строками определенной выборки в MySQL?

Добрый день, подскажите пожалуйста, куда нужно копать, имеет такого рода таблица

user ; datetime ; event
user1 ; 23.03.2022 00:00:00 ; 1
user1 ; 23.03.2022 00:10:00 ; 2
user1 ; 23.03.2022 00:15:00 ; 1
user2 ; 23.03.2022 00:20:00 ; 1
user1 ; 23.03.2022 00:30:00 ; 2
user2 ; 23.03.2022 00:30:00 ; 1

в данном случае event 1 - это вход пользователя, 2 - это выход
задача такая, что нужно посчитать общее время работы пользователей.
Т.е. если посмотреть на пример выше то за март месяц первый пользователь проработал 25 минут в целом, а второй пользователь 10 минут

Каким то образом нужно сгруппировать и с агрегировать информацию по длительности между парными строками по каждому пользователю и чтобы event шли в определенной последовательности, т.е. только между 1 и 2 (не между 2 и 1)
  • Вопрос задан
  • 218 просмотров
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
WITH cte AS ( SELECT *, 
                     LAG(`datetime`) OVER (PARTITION BY login ORDER BY `datetime`) lag_datetime, 
                     LAG(event) OVER (PARTITION BY login ORDER BY `datetime`) lag_event 
              FROM history )
SELECT login, SUM(TIMESTAMPDIFF(MINUTE, lag_datetime, `datetime`)) duration
FROM cte
WHERE (event, lag_event) = (2,1)
GROUP BY login;

https://dbfiddle.uk/?rdbms=mariadb_10.6&fiddle=398... (исходные данные подправлены).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы