sql >> Base de Datos >  >> RDS >> Sqlserver

FILA DE SELECCIÓN DE SQL

Eso se hace fácilmente con row_number() función de ventana:

; 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

Ejemplo en vivo en SQL Fiddle.

No es que su salida de ejemplo no cumpla con sus requisitos. Incluye varias filas que no coinciden con ninguno de los tres criterios (primera fila, última fila, inicio tras parada).