Este tema es parecido a uno tratado hace tiempo, y la solucion no pasa por ordenar, o armar búsquedas como lo planteas.
Si lo miras bien, lo que estás pidiendo una tabla como resultado de una consulta tal que:
1) Siempre tenga un valor dado en la cuarta posición.
2) Siempre tenga tres registros precedentes mayores al cuarto.
3) Siempre tenga dos registros posteriores, y menores al cuarto.
En principio, el planteo carece de sentido desde el momento en que en un sistema estadístico o de sumatorias, no puedes predecir que
siempre habrá un conjunto de X registros antes o después, porque podría suceder que la suma de puntajes sea en uno, más de uno o todos, inferior o superior al valor dado de referencia (el cuarto).
Por ende, no puedes, a priori, predefinir que siempre habrá algo que lo preceda, o lo suceda.
Pero dejando de lado que no es racional el planteo, una consulta como la que quieres únicamente se puede construir en forma simple segmentando los rangos en diferentes consultas, y generando una respuesta única, con UNION:
Código MySQL:
Ver original (SELECT U.userId Usuario
, U.nicename
, H.points
SELECT U.userId Usuario
, U.nicename
, H.points
(SELECT U.userId Usuario
, U.nicename
, H.points
Si bien esto debería funcionar, no garantiza que obtengas realmente los tres registros superiores o los dos inferiores pedidos. Sólo que el valor de este usuario ID = 4 (que uso de ejemplo) aparezca siempre, como mucho, en la posicion 4 si la consulta devuelve hasta 6 registros.
El resto, no se puede asegurar, porque dependerá de los datos existentes.