Lo siento si el título es confuso, tengo una tabla que almacena a un jugador y cuánto tiempo les tomó completar el mapa en segundos, estoy tratando de escribir una consulta que seleccione todos los mapas que un jugador específico tiene el tiempo más rápido / más corto

Intenté esta consulta:

SELECT * 
  FROM ck_playertimes a 
  JOIN 
     ( SELECT MIN(runtimepro) runtimepro 
         FROM ck_playertimes 
        WHERE style = 0 
        group 
           by mapname
     ) b 
    ON a.runtimepro = b.runtimepro 
 WHERE steamid = 'STEAM_1:0:20019070' 
   AND style = '0'

Sin embargo, está seleccionando algunos momentos que no son los más cortos / rápidos para un mapa específico e incluso hay un duplicado de alguna manera cuando ese duplicado no existe en la tabla

¿Alguna ayuda? =)

-1
fluffys 16 oct. 2018 a las 17:53

2 respuestas

La mejor respuesta

La subconsulta a la que te unes debe encontrar el tiempo de ejecución mínimo para cada jugador . Entonces, lo siguiente debería funcionar:

SELECT c1.*
FROM ck_playertimes c1
INNER JOIN
(
    SELECT mapname, MIN(runtimepro) AS min_runtimepro
    FROM ck_playertimes
    GROUP BY mapname
) c2
    ON c1.mapname = c2.mapname AND c1.runtimepro = c2.min_runtimepro
WHERE
    c1.steamid = 'STEAM_1:0:20019070' AND
    c1.style = '0';

Si está usando MySQL 8+ o posterior, otra forma más moderna de escribir la consulta anterior usa ROW_NUMBER:

SELECT *       -- but always better to list out explicit columns
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY mapname ORDER BY runtimepro) rn
    FROM ck_playertimes
) t
WHERE rn = 1;
1
Tim Biegeleisen 16 oct. 2018 a las 14:57

Lo que está preguntando es el tiempo mínimo y máximo, para cada jugador, para cada mapa Esta es una selección básica con grupo por, con bo unirse

Supuse que la tabla que seleccionaste contiene un player_id además del tiempo en segundos y mantuve las condiciones DONDE que proporcionaste

Esperanza que ayuda

SELECT  player_id, mapname, MIN(runtimepro) As shortest, 
MAX(runtimepro) As longest
FROM ck_playertimes times

WHERE

steamid = 'STEAM_1:0:20019070'
AND style = '0'
GROUP BY 
player_id, mapname
0
Guy Louzon 16 oct. 2018 a las 15:06