我的数据库很大,想做一些复杂的查询。这是一个演示表:
id time value
0 0001 3333
1 1111 valueA
2 1112 6666
3 1113 valueB
4 8888 4444
我想平均所有valueA
和所有valueB
的平均值。 valueA
和valueB
满足以下条件:
time
的{{1}}和valueA
的{{1}}很近,例如,它们的差在2以下,并且valueA和valueB之间的行数至少为3(包括第{{ 1}}和行time
)。
有什么方便的方法可以解决这个问题?
答案 0 :(得分:0)
我不太确定您的需要。通过对问题输入 AND 输入的内容进行一些采样,也许会更加清楚。
尽管如此,也许这段代码可以助您一臂之力。
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;