Możesz to zrobić za pomocą lag()
funkcja okna na partycji przez identyfikator stream_id, który jest uporządkowany według znacznika czasu. lag()
funkcja daje dostęp do poprzednich wierszy w strefie; bez wartości opóźnienia, jest to poprzedni wiersz. Jeśli więc partycja na stream_id jest uporządkowana według czasu, to poprzedni wiersz jest poprzednim zdarzeniem dla tego 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");