Как рассчитать результат на основе соседних строк, удовлетворяющих некоторым условиям - PullRequest
0 голосов
/ 25 апреля 2019

У меня большая база данных, и я хочу выполнить сложный запрос. Вот демонстрационный стол:

id   time   value
0     0001   3333  
1     1111   valueA
2     1112   6666
3     1113   valueB
4     8888   4444 

Я хочу получить среднее значение всех valueA и среднее значение всех valueB. valueA и valueB соответствуют следующим условиям: time из valueA и time из valueB находятся рядом, например, их разность меньше 2, а количество строк между значением A и значением B составляет не менее 3 (включая строку valueA и строку valueB).

Есть ли какой-нибудь удобный способ решения этой проблемы?

1 Ответ

0 голосов
/ 25 апреля 2019

Я не совсем уверен в вашей необходимости. С небольшим примером того, что у вас есть на входе вашей проблемы И , что вы должны иметь на выходе, возможно, это будет более понятным.

Тем не менее, возможно, этот код поможет вам.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...