如何根据相邻行计算结果满足某些条件

时间:2019-04-25 05:36:41

标签: sql database hive hiveql

我的数据库很大,想做一些复杂的查询。这是一个演示表:

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

我想平均所有valueA和所有valueB的平均值。 valueAvalueB满足以下条件: time的{​​{1}}和valueA的{​​{1}}很近,例如,它们的差在2以下,并且valueA和valueB之间的行数至少为3(包括第{{ 1}}和行time)。

有什么方便的方法可以解决这个问题?

1 个答案:

答案 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;