To lze snadno provést pomocí row_number()
funkce okna:
; with numbered as
(
select row_number() over (order by [time]) rn
, count(*) over() as cnt
, *
from Table1
)
select *
from numbered cur
left join
numbered prev
on cur.rn = prev.rn + 1
left join
numbered next
on cur.rn = next.rn - 1
where cur.rn in (1, cur.cnt) -- first or last row
or (cur.id = 'start' and prev.id = 'stop') -- start after stop
order by
cur.rn
Ne že by váš příkladový výstup nesplňoval vaše požadavky. Zahrnuje několik řádků, které neodpovídají žádnému ze tří kritérií (první řádek, poslední řádek, začátek po zastávce.)