Как рассчитать онлайн-секунды за интервал времени на основе записей входа / выхода из системы в PostgreSQL

#sql #postgresql #datetime #logging #sum

#sql #postgresql #дата и время #ведение журнала #сумма

Вопрос:

У меня есть таблица, которая содержит логины и выходы из системы разных пользователей:

 login   event_date                  event
------------------------------------------
user1   2016-09-16 20:14:28.412830  LOGIN
user1   2016-09-16 20:34:38.937436  LOGOUT
user1   2016-09-16 20:36:34.363710  LOGIN
user1   2016-09-16 21:07:39.470257  LOGOUT
user1   2016-09-16 21:14:37.849903  LOGIN
...
user2   2016-09-16 00:05:02.937110  LOGOUT
user2   2016-09-16 15:00:36.478966  LOGIN
user2   2016-09-16 16:25:01.294783  LOGOUT
user2   2016-09-16 16:30:19.965582  LOGIN
user2   2016-09-16 20:35:04.926386  LOGOUT
...
user3   2016-09-16 11:05:12.818579  LOGIN
user3   2016-09-16 14:42:02.487888  LOGOUT
user3   2016-09-16 14:54:50.574649  LOGIN
user3   2016-09-16 16:00:01.106796  LOGOUT
user3   2016-09-16 17:09:31.366645  LOGIN
user3   2016-09-16 17:25:39.470333  LOGOUT
  

Примечание: данные в этой таблице, естественно, упорядочены по event_date (или, скорее, по id ); порядок по login предусмотрен для удобства.

Мне нужно рассчитать онлайн-время каждого пользователя за интервал времени (например, каждые 30 минут, час, день и т. Д.) И За день недели.

Результат, который мне нужен, выглядит примерно так:

 login   hour                 seconds_online
-------------------------------------------
user1   2016-09-16 20:00:00  1920
user1   2016-09-16 21:00:00  420
...
user2   2016-09-16 00:00:00  302
user2   2016-09-16 15:00:00  3564
user2   2016-09-16 16:00:00  1490
...
user3   2016-09-16 11:00:00  3285
user3   2016-09-16 12:00:00  3600  <- Please note how these two lines
user3   2016-09-16 13:00:00  3600  <- relate to the actual log above.
user3   2016-09-16 14:00:00  1078
...
  

Или:

 login   day_of_week  seconds_online
-----------------------------------
user1   Monday       17280
user1   Tuesday      16540
...
user2   Monday       16990
user2   Tuesday      17014
...
  

Пожалуйста, помогите!

Комментарии:

1. Решается путем реализации цикла по этим записям во внешнем скрипте и вычисления там онлайн-времени.