在 Postgre 的时间序列中查找组
Finding groups within time series in Postgre
我有一个时间戳列表,我想在它们足够接近时(小于 15 秒间隔)将它们标记为一个组。这就是我最终想要的:
time
group number
18:01:00
1
18:01:06
1
18:10:00
/
18:20:30
2
18:20:40
2
18:20:50
2
18:25:02
/
使用 lag()
和日期比较来确定组的开始位置。然后使用累计和。实际上,您只想在组中包含具有多行的行,因此这比简单的间隙和孤岛问题要复杂一些:
select t.*,
(case when prev_time > time - interval '15 second' or
next_time < time + interval '15 second'
then sum(case when prev_time > time - interval '15 sec' then 0 else 1 end) over (order by time)
end) as group_number
from (select t.*,
lag(time) over (order by time) as prev_time,
lead(time) over (order by time) as next_time
from t
) t
我有一个时间戳列表,我想在它们足够接近时(小于 15 秒间隔)将它们标记为一个组。这就是我最终想要的:
time | group number |
---|---|
18:01:00 | 1 |
18:01:06 | 1 |
18:10:00 | / |
18:20:30 | 2 |
18:20:40 | 2 |
18:20:50 | 2 |
18:25:02 | / |
使用 lag()
和日期比较来确定组的开始位置。然后使用累计和。实际上,您只想在组中包含具有多行的行,因此这比简单的间隙和孤岛问题要复杂一些:
select t.*,
(case when prev_time > time - interval '15 second' or
next_time < time + interval '15 second'
then sum(case when prev_time > time - interval '15 sec' then 0 else 1 end) over (order by time)
end) as group_number
from (select t.*,
lag(time) over (order by time) as prev_time,
lead(time) over (order by time) as next_time
from t
) t