【问题标题】:SQL break groups by a conditionSQL 按条件拆分组
【发布时间】:2020-10-12 10:25:28
【问题描述】:

假设我有这张桌子:

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    

【问题讨论】:

    标签: sql window-functions gaps-and-islands


    【解决方案1】:

    您可以使用聚合。我们如何定义组?在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
    

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      相关资源
      最近更新 更多