Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-08-2022 08:28 AM
This is likely sub-optimal for spark SQL, but it got me the right answer.
with cte1 as (
select *
from results
)
, cte2 as (
select *
from cte1
where TransferFrom is not null
or TransferTo is not null
order by ActionTime
)
, cte3 as (
select distinct OrderID, TransferFrom as Team from cte2
union
select distinct OrderID, TransferTo as Team from cte2
)
, cte4 as (
select a.*
,ifnull(timestampadd(MICROSECOND, 1, c.ActionTime),'2000-01-01T00:00:00.000+0000') as StartTime
,ifnull(b.ActionTime,'9999-12-31T00:00:00.000+0000') as EndTime
from cte3 as a
left join cte2 as b
on a.OrderID = b.OrderID
and a.Team = b.TransferFrom
left join cte2 as c
on a.OrderID = c.OrderID
and a.Team = c.TransferTo
order by OrderID, StartTime
)
, cte5 as (
select a.*, b.Team
from cte1 as a
join cte4 as b
on a.OrderID = b.OrderID
and a.ActionTime between b.StartTime and b.EndTime
)
select *
from cte5
order by 1, 4