SQL中断按条件分组

问题描述

假设我有这张桌子:

timestamp | is_break | data
----------+----------+------
 0        | 1        | 10
 1        | 0        | 20
 2        | 1        | 5
 3        | 1        | 10
 4        | 0        | 20
 5        | 0        | 30

如何通过is_break列将数据分成几组?

例如,按组获取数据的AVG,例如:

min_timestamp | avg_data
--------------+---------
 0            | 15        
 2            | 5
 3            | 20    

解决方法

您可以使用聚合。我们如何定义组?在is_break列上加上一个窗口总和:

select min(timestamp),avg(date) avg_date
from (
    select t.*,sum(is_break) over(order by timestamp) grp
    from mytable t
)
group by grp