Q:

Выборка и сумма временных интервалов

Есть такая таблица:
id        time           event     adr         
1   11/08/2019 13:05:47    1        1   
2   11/08/2019 13:05:49    1        2   
3   11/08/2019 13:05:50    2        1   
4   11/08/2019 13:05:53    1        1   
5   11/08/2019 13:05:55    2        1   
6   11/08/2019 13:05:57    1        1   
7   11/08/2019 13:05:59    1        3   
8   11/08/2019 13:06:20    2        3   
9   11/08/2019 13:06:30    2        1   
10  11/08/2019 13:07:35    1        1   
11  11/08/2019 13:08:58    1        1   

Задача:найти сумму временных интервалов между событиями event 2 и 1 для adr равным 1.
То есть, узнать сколько времени прошло от event 2 до event 1 для конкретного adr и суммировать это значение.
На конкретном примере ответ должен получиться: 3 сек + 2 сек + 65 сек = 70 секунд
PS Postgres 10

A:

WITH cte AS (
SELECT *, 
       LEAD(event) OVER (PARTITION BY adr ORDER BY time ASC) next_event,
       LEAD(time) OVER (PARTITION BY adr ORDER BY time ASC) next_time
FROM test
)
SELECT adr, SUM(next_time-time) delta
FROM cte
WHERE event=2 
  AND next_event=1
GROUP BY adr

fiddle

