使用 PostgreSQL 计算行和条件组之间的时间差

compute time difference between rows and conditional group by using PostgreSQL

我有如下所示的数据:

+-------+-------+
| index | time  |
+-------+-------+
|     1 | 09.00 |
|     2 | 09.02 |
|     3 | 09.03 |
|     4 | 09.05 |
|     5 | 09.11 |
|     6 | 09.12 |
|     7 | 09.15 |
|     8 | 09.22 |
|     9 | 09.33 |
+-------+-------+

如果行之间的时间差 <= 5 分钟,请为它们分配相同的 ID,如下所示。我希望我的输出如下所示:

+-------+-------+
| index | time  |
+-------+-------+
|     1 | 09.00 |
|     1 | 09.02 |
|     1 | 09.03 |
|     1 | 09.05 |
|     2 | 09.11 |
|     2 | 09.12 |
|     2 | 09.15 |
|     3 | 09.22 |
|     4 | 09.33 |
+-------+-------+

我正在尝试类似下面的操作

    select index, (lag_time - time) from (
    select 
        index, 
        time,
        LAG(time,1) OVER (
            ORDER BY time
        ) lag_time) A

你只需要一个累计数:

select t.*,
       count(*) filter (where prev_time < time - interval '5 minute') over (order by time) as index
from (select t.*,
             lag(time) over (order by time) as prev_time
      from t
     ) t;

Here 是一个 db<>fiddle.