您可以使用lag()
window函数在分区上通过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");