¿Cómo podemos obtener dos filas antes y después de una identificación dada en una tabla?
Frecuentes
Visto 375 equipos
0
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?
2 Respuestas
2
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
0
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 sql-server sql-server-2008 or haz tu propia pregunta.
¿Qué versión de SQL Server? ¿Y cuál es su producción esperada? - Damien_The_Unbeliever