Я не совсем уверен в вашей необходимости. С небольшим примером того, что у вас есть на входе вашей проблемы И , что вы должны иметь на выходе, возможно, это будет более понятным.
Тем не менее, возможно, этот код поможет вам.
with cte_order as
(
select
*
, row_number() over (order by t1.id)
from test t1
)
select avg(t1.value), avg(t2.value)
from cte_order t1
inner join cte_order t2 on t1.time between t2.time - 2 and t2.time + 2
where t1.id <> t2.id
and abs(t1.row_number - t2.row_number) >= 3;