根据条件提取记录
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 两个事件。
我只想提取 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 两个事件。