¿Cómo podemos obtener dos filas antes y después de una identificación dada en una tabla?

tengo una mesa con 10 filas

id  values
 1    a
 2    b
 3    c
 4    d
 5    e
 6    f
 7    g
 8    h
 9    i
 10   j

Quiero obtener dos filas antes y dos filas después para @id = 5.

¿Cómo se puede conseguir?

preguntado el 04 de julio de 12 a las 11:07

¿Qué versión de SQL Server? ¿Y cuál es su producción esperada? -

2 Respuestas

Editar Esto debería funcionar como se esperaba (con suerte):

select id, value
from [table]
where id-@id >= -2 
AND   id-@id <=  2 
AND   id-@id <>  0

Aquí está el sql en ejecución: http://sqlfiddle.com/#!6/ca4e5/3/0

Respondido 04 Jul 12, 14:07

@Indra: ¿qué quiere decir con "número de identificación no en orden"? ¿Cómo? más ¿está definiendo qué filas están "antes" o "después" de cualquier fila dada? Las tablas tienen no orden inherente. - damien_el_incrédulo

Una posible solución:

select *
from table
where id in (3, 4, 6, 7)

Si está utilizando una variable int @id, puede hacerlo así:

select *
from table
where id in (@id-2, @id-1, @id+1, @id+2)

Para seleccionar los dos anteriores:

select top 2 *
from tablename
where id < @id
order by id desc

Para seleccionar los dos siguientes:

select top 2 *
from tablename
where id > @id
order by id asc

Respondido 04 Jul 12, 11:07

Si no tenemos valores de serie en la tabla? (Quiero decir que algunos pueden eliminar las filas) ¿cómo podemos obtener? - Indra

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.