使用 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.
我有如下所示的数据:
+-------+-------+
| 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.