【问题标题】:Removing consecutive duplicate rows bigquery删除连续重复行bigquery
【发布时间】:2020-03-30 05:02:01
【问题描述】:

我有一些event 数据被分组到sessions。在某些情况下,我想删除这些会话中的连续重复事件。 bigquery 有没有办法做到这一点?

例如

初始表:

session   eventType   eventOrder
1         a           1
1         a           2     
1         b           3
2         b           1
2         a           2
2         b           3     

想要的结果:

session   eventType   eventOrder
1         a           1
1         b           3
2         b           1
2         a           2
2         b           3    

【问题讨论】:

  • 如何定义连续重复事件?事实上,这无法从您的数据集中进行评估。你需要一个 indentity 列才有意义(比如一个自动递增的列):你有这样的列吗?
  • eventOrder 给出了事件的顺序。所以基本上删除任何与 session 和 eventType 匹配的行,下面的行是由 session 和 eventOrder 排列的表
  • 好的。另一个问题,您是在寻找select 还是delete 声明?
  • 寻找选择查询

标签: sql google-bigquery data-manipulation data-cleaning gaps-and-islands


【解决方案1】:

您可以使用lag()。这个想法是将当前事件类型与同一会话的先前值进行比较,并消除它们匹配的记录:

select session, eventType, eventOrder
from (
    select 
        t.*,
        lag(eventType) over(partition by session order by eventOrder) lag_eventType
    from mytable t
) t
where lag_eventType is null or eventType != lag_eventType

【讨论】:

  • 这是一个完美的解决方案!谢谢!
猜你喜欢
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 2021-09-14
  • 2021-12-20
  • 2013-10-28
  • 2017-09-20
相关资源
最近更新 更多