sql >> Base de Datos >  >> RDS >> Mysql

¿Devolviendo un Min() y otro campo?

La cosa es esta:a cualquier función agregada "no le importa" el resto de su línea. Si no fuera MIN sino SUM, es más fácil de ver...

La solución es un poco complicada, deberías hacer algo que involucre LEFT JOIN con una desigualdad:

SELECT u.username, l.timer AS intScore, l.hashtag

FROM
 leaderboard l
 INNER JOIN users u ON u.users_id = l.users_id
 LEFT JOIN leaderboard l2 ON l.users_id = l2.users_id AND l2.timer < l.timer
WHERE
 l2. users_id IS NULL
ORDER BY intScore ASC

La idea es obtener el valor más bajo omitiendo la función MIN y obteniendo la fila completa

Filtrar por fecha (o cualquier otra columna / criterio para el caso) de la tabla de clasificación, requerirá que filtremos cada tabla que usamos. Es importante filtrar la tabla LEFT JOINed en la condición ON, de lo contrario eliminamos el efecto de filtrado NULL:

SET @date0 = '2018-01-01';
SELECT u.username, l.timer AS intScore, l.hashtag

FROM
 leaderboard l
 INNER JOIN users u ON u.users_id = l.users_id
 LEFT JOIN leaderboard l2 ON l.users_id = l2.users_id AND l2.timer < l.timer AND l2.game_date >= @date0
WHERE
 l.game_date >= @date0
 l2.users_id IS NULL
ORDER BY intScore ASC

Espero que ayude