【问题标题】:Consecutive values bigquery连续值大查询
【发布时间】:2021-11-06 02:21:04
【问题描述】:

我得到了“类型”和“前一行”文件,并试图生成“连续值”文件

我尝试使用count () over (partition by type , previouse row ) 但“上一行”更改后值不会重置

type previous row Consecutive values
X 1 2
X 1 1
X 0 3
X 0 2
X 0 1
X 1 2
X 1 1

我该如何解决这个问题?

【问题讨论】:

    标签: google-bigquery partition


    【解决方案1】:

    为了实现您的目标 - 您需要了解如何对行进行排序。通常是某种日期或时间戳或任何其他允许订购的方式。所以让我们假设您有一个额外的可用列,称为 ts 定义该顺序 - 如下例所示

    所以在这种情况下考虑以下解决方案

    select * except(change, grp),
      count(1) over(partition by type, grp order by ts desc) Consecutive_values
    from (
      select *, countif(change) over(partition by type order by ts) grp
      from (
        select *, 
          ifnull(value != lag(value) over(partition by type order by ts), true) change
        from data
      )
    )
    # order by ts     
    

    如果应用于样本数据 - 输出是

    【讨论】:

      猜你喜欢
      • 2022-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多