add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
drop
table if exists #temp
select
* into #temp
from
(
values
('id100', 'status1', 1),
('id100', 'status2', 2),
('id100', 'status1', 3),
('id100', 'status0', 4),
('id100', 'status2', 5),
('id100', 'status2', 6),
('id100', 'status1', 7),
('id100', 'status1', 8),
('id100', 'status2', 9),
('id101', 'status1', 10),
('id101', 'status2', 11)
) t(id, status, rowNum)
11 rows affected
select *, CASE WHEN status='status2' then
(last_value(case when status='status1' then rowNum else null end) ignore nulls over(order by rowNum)) end value
from #temp t
order by rowNum
id status rowNum value
id100 status1 1 null
id100 status2 2 1
id100 status1 3 null
id100 status0 4 null
id100 status2 5 3
id100 status2 6 3
id100 status1 7 null
id100 status1 8 null
id100 status2 9 8
id101 status1 10 null
id101 status2 11 10
select *, CASE WHEN status='status2' then
(lag(case when status='status1' then rowNum else null end) ignore nulls over(order by rowNum)) end value
from #temp t
order by rowNum
id status rowNum value
id100 status1 1 null
id100 status2 2 1
id100 status1 3 null
id100 status0 4 null
id100 status2 5 3
id100 status2 6 3
id100 status1 7 null
id100 status1 8 null
id100 status2 9 8
id101 status1 10 null
id101 status2 11 10