El problema es el ordenamiento: Debe realizarse antes de hacer el agrupamiento, para que de esa forma los valores mayores de peso se coloquen arriba.
El problema es que no se puede invertir la posición del GROUP BY y ORDER BY o de lo contrario daría un error de sintaxis, pero de todos modos la solución es simple, aunque molesta de escribir: Hay que realizar el ordenamiento en una subconsulta y el agrupamiento por fuera:
Código SQL:
Ver originalSELECT
id_especie,
id_socio,
id_pantano,
kg,
cm,
imajen,
nombre_usuario,
pantano,
especie
FROM
(SELECT DISTINCT
R.id_especie,
R.id_socio,
R.id_pantano,
R.kg,
R.cm,
R.imajen,
U.nombre_usuario,
P.pantano,
E.especie
FROM records R
INNER JOIN usuarios U ON R.id_socio = U.usuario_id
INNER JOIN pantano P ON R.id_pantano = P.id
INNER JOIN especies E ON R.id_especie=E.id
ORDER BY R.id_especie ASC, R.kg DESC, U.usuario_id ASC) T1
GROUP BY id_especie;
Notarás tres cosas:
1. Eliminé algunos campos de los que habías colocado. Esto es porque son redundantes: Si pones el R.id_socio, ¿para qué poner el
U.usuario_id?
Es el mismo número y representa el mismo dato. Lo mismo pasa con
E.id,
P.id_pantano, y otros.
2. No estoy poniendo los alias en el SELECT exterior. Esto se debe a que esos alias mueren dentro de la subconsulta. En la exterior correspondería (si quisieras) T1, ya que ese es el alias de la tabla derivada (la generada por la subconsulta).
3. Estoy poniendo más campos como ordenamiento, y a cada uno le doy un ordenamiento distinto. Esto lo hago para que el primer registro que aparezca, y sobre el que se agruparán los restantes, sea el de mayor peso, pero que tanto los ID de la especie y el de los usuarios se ordenen de menor a mayor, previendo que dos usuarios se correspondan con el mismo pez, y éste posea el mismo peso (improbable, pero no imposible).