Quiero seleccionar algunas filas según ciertos criterios, y luego tomar una entrada de ese conjunto y las 5 filas anteriores y posteriores.¿Cómo puedo seleccionar filas adyacentes a una fila arbitraria (en sql o postgresql)?
Ahora, puedo hacer esto numéricamente si hay una clave principal en la tabla (por ejemplo, claves primarias que son numéricamente 5 menos que la clave de la fila de destino y 5 más que la clave de la fila de destino).
así que seleccione la fila con la clave primaria de 7 y las filas en las inmediaciones:
select primary_key from table where primary_key > (7-5) order by primary_key limit 11;
2
3
4
5
6
-=7=-
8
9
10
11
12
Pero si selecciono solamente ciertas filas, para empezar, pierdo ese método numérico de utilizar claves primarias (y que fue asumiendo que las claves no tenían vacíos en su orden de todos modos), y necesitan otra forma de obtener las filas más cercanas antes y después de una determinada fila específica.
La salida de clave principal de tal selecto podría parecerse más al azar y por lo tanto menos succeptable de localización matemática (ya que algunos resultados se filtran, hacia fuera, por ejemplo, con un where active=1
):
select primary_key from table where primary_key > (34-5)
order by primary_key where active=1 limit 11;
30
-=34=-
80
83
100
113
125
126
127
128
129
Nota cómo, debido a los huecos en las claves primarias causados por el ejemplo donde la condición (por ejemplo porque hay muchos elementos inactivos), ya no obtengo los 5 más cercanos y 5 más abajo, en cambio obtengo el más cercano 1 a continuación y el el 9 más cercano arriba, en cambio.
Creo que la instrucción SELECT que escribió funcionaría en ambos ejemplos. – LatinSuD
Err, la instrucción select devolvería valores, sí, pero las filas que devolvió serían esencialmente aleatorias, en lugar de 5 arriba y 5 abajo, es el problema. – Kzqai