Můžete to udělat pomocí lag()
funkce okna přes oddíl podle stream_id, který je řazen podle časového razítka. lag()
funkce umožňuje přístup k předchozím řádkům v oddílu; bez hodnoty zpoždění je to předchozí řádek. Pokud je tedy oddíl na stream_id seřazen podle času, pak předchozí řádek je předchozí událostí pro toto 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");