Можете да направите това с lag()
прозоречна функция над дял от stream_id, който е подреден по клеймото за време. lag()
функция ви дава достъп до предишни редове в дяла; без стойност на забавяне, това е предишният ред. Така че, ако дялът на stream_id е подреден по време, тогава предишният ред е предишното събитие за този stream_id.
SELECT stream_id, lag(id) OVER pair AS start_id, id AS end_id,
("timestamp" - lag("timestamp") OVER pair) AS diff
FROM my_table
WHERE diff > interval '2 minutes'
WINDOW pair AS (PARTITION BY stream_id ORDER BY "timestamp");