Sql 删除bigquery中的连续重复行

Sql 删除bigquery中的连续重复行,sql,google-bigquery,data-manipulation,data-cleaning,Sql,Google Bigquery,Data Manipulation,Data Cleaning,我有一些分组到会话中的事件数据。在某些情况下,这些会话中存在连续的重复事件,我希望删除这些事件。在bigquery中有这样做的方法吗 例如 初始表格: session eventType eventOrder 1 a 1 1 a 2 1 b 3 2 b 1 2 a 2 2 b

我有一些分组到会话中的事件数据。在某些情况下,这些会话中存在连续的重复事件,我希望删除这些事件。在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    
你可以用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
你可以用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

如何定义连续的重复事件?事实上,这无法从您的数据集进行评估。您需要一个indentity列才能像自动递增列一样理解:您有这样的列吗?eventOrder给出了事件的顺序。因此,基本上删除任何与session和eventType匹配的行,该行位于下一行,表按session和eventOrderOK排列。另一个问题,您是在寻找select语句还是delete语句?寻找select查询如何定义连续重复事件?事实上,这无法从您的数据集进行评估。您需要一个indentity列才能像自动递增列一样理解:您有这样的列吗?eventOrder给出了事件的顺序。因此,基本上删除任何与session和eventType匹配的行,该行位于下一行,表按session和eventOrderOK排列。另一个问题,你是在寻找select还是delete语句?寻找select查询这是一个完美的解决方案!谢谢你!这是一个完美的解决方案!谢谢你!