Lo que quiero es sacar el registro siguiente y el anterior a uno especifico, algo como:
idActual - idAnterior - idSiguiente
---10-----------9-------------11-----
Cuando es por ordenado por id es sencillo haciendo una subconsulta y obteniendo el mayor y el menor al id actual, pero mi problema es que intento obtener el registro anterior con menor promedio y el siguiente con mayor promedio.
Si ordeno por promedio hay muchos promedios que son iguales y los id van a estar ordenados, también intenté enumerar filas pero para ordenar me quedan los promedios desordenados.
Si alguien sabe como obtenerlos u otra solución estaría agredecido
La idea es seleccionar el promedio de una foto actual, el registro anterior que va a ser la foto que tiene menor promedio que esa actual y el siguiete
Mis tablas con los campos relevantes
Código SQL:
Ver original
CREATE TABLE IF NOT EXISTS `fotos` ( `id` INT(7) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ); INSERT INTO `fotos` (`id`) VALUES (80), (81), (82), (83), (84), (85), (86); CREATE TABLE IF NOT EXISTS `votos` ( `id` INT(7) NOT NULL, `puntaje` INT(2) NOT NULL ); INSERT INTO `votos` (`id`, `puntaje`) VALUES (84, 3),(82, 4),(81, 3),(80, 4),(85, 4),(82, 3),(82, 3),(84, 5),(81, 4),(86, 4),(85, 3);
Esta es la consulta que tengo pero no funciona
Código SQL:
Ver original
SELECT f.id, ROUND(AVG(v.puntaje), 1) promedio FROM fotos f, votos v WHERE v.id = f.id AND f.id <> 86 GROUP BY v.id HAVING promedio <= (SELECT ROUND(AVG(v.puntaje), 1) FROM fotos f, votos v WHERE v.id = 86 AND f.id = 86) ORDER BY promedio DESC, f.id DESC LIMIT 1
Con esa intento sacar el menor a registro 86, me sale el 84 que tiene igual promedio y menor id pero cuendo saco el de 84 me muestra otra vez el 86, debería hacer una consición que sean menor al id actual pero después en otros no funciona porque los id son mayores
Gracias