Группировка запросов по нефиксированным временным интервалам - PullRequest
0 голосов
/ 22 мая 2018

Я бы хотел сгруппировать по нефиксированным временным интервалам.То есть у меня есть некоторые события, имеющие начало и конец, и я хотел бы подсчитать, сколько событий происходило одновременно.

У меня есть такая таблица

       start         |          end           |   desc
-----------------------------------------------------------
'2018-03-29 13:36:52'|'2018-03-29 13:37:52+02'|'Alarm_821'
'2018-03-29 13:39:52'|'2018-03-29 13:41:52+02'|'Alarm_821'
'2018-03-29 15:44:15'|'2018-03-29 15:50:16+02'|'Alarm_819'
'2018-03-29 15:44:15'|'2018-03-29 15:51:16+02'|'Alarm_817'
'2018-03-29 16:08:18'|'2018-03-29 16:10:19+02'|'Alarm_418'
'2018-03-29 16:08:18'|'2018-03-29 16:10:19+02'|'Alarm_465'
'2018-03-29 16:11:19'|'2018-03-29 16:15:19+02'|'Alarm_418'

И я хотел бы получить этот результат:

           start         |          end     |     count
-----------------------------------------------------------
'2018-03-29 13:36:52'|'2018-03-29 13:37:52+02'|     1
'2018-03-29 13:39:52'|'2018-03-29 13:41:52+02'|     1
'2018-03-29 15:44:15'|'2018-03-29 15:50:16+02'|     2
'2018-03-29 15:50:16'|'2018-03-29 15:51:16+02'|     1       <<== here start refers to the end of the first event ending when both of them started
'2018-03-29 16:08:18'|'2018-03-29 16:10:19+02'|     2
'2018-03-29 16:11:19'|'2018-03-29 16:15:19+02'|     1

Я на самом деле не уверен, что это можно сделать только с помощью SQL.

1 Ответ

0 голосов
/ 22 мая 2018

Вот решение, основанное на СОЮЗЕ всех времен в таблице.Он создает смежные пары из этого списка, а затем ищет интервалы перекрытия.

select t.st, t.en, count(*)
from
(
  select lag(tm) over (order by tm) st, tm en
  from
  (
    select "start" tm from data 
    union
    select "end" tm from data
  ) r
) t
join data on t.st < data."end" and t.en > data."start"
group by t.st, t.en
order by t.st

DBFiddle DEMO

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