根据条件提取记录

Extract records based on a condition

我只想提取 OrderofEvents 1 后跟 2 的行。例如,数据按 EventTime 排序,每当 EventName 更改 OrderofEvents 变化。每当 OrderofEvents 发生变化时,我想提取该行和前一行。下面是输入数据的样子-

EventName             EventTime       OrderofEvents
AddedtoCart       2020-02-22 11:40         1 
AddedtoCart       2020-02-23 12:40         1   
AddedtoCart       2020-02-24 01:40         1   
Billed            2020-02-24 01:42         2   
AddedtoCart       2020-03-01 02:40         1   
AddedtoCart       2020-03-02 03:40         1   
AddedtoCart       2020-03-02 04:40         1   
AddedtoCart       2020-03-03 05:40         1    

输出应该类似于 -

EventName             EventTime       OrderofEvents 
AddedtoCart       2020-02-24 01:40         1   
Billed            2020-02-24 01:42         2      

使用lead函数

     Select * from table
       where 
       OrderofEvents<> lead(OrderofEvents) over ()

或者如果上面不支持试试这个

      WITH CTE AS 
    (Select *,lead(OrderofEvents) over (order by (SELECT NULL) 
       )as lg
       from table)
       Select * from CTE where
       OrderofEvents<> lg
       
       

您可以使用 lead()lag():

select t.*
from (select t.*,
             lead(OrderofEvents) over (order by eventtime) as next_ooe,
             lag(OrderofEvents) over (order by eventtime) as prev_ooe
      from t
     ) t
where (OrderofEvents = 1 and next_ooe = 2) or
      (OrderofEvents = 2 and prev_ooe = 1) ;

这 returns 两个事件。