Mysql
 sql >> Database >  >> RDS >> Mysql

Restituire un Min() e un altro campo?

Il fatto è questo:a qualsiasi funzione aggregata "non importa" del resto della sua linea Se non era MIN ma SUM, è più facile da vedere...

La soluzione è un po' complicata, dovresti fare qualcosa che comporti LEFT JOIN con una disuguaglianza :

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

L'idea è ottenere il valore più basso saltando la funzione MIN e ottenendo l'intera riga

Il filtraggio per data (o qualsiasi altra colonna/criterio in tal senso) dalla tabella leaderboard, richiederà di filtrare ogni tabella che utilizziamo È importante filtrare la tabella LEFT JOINed alla condizione ON, altrimenti eliminiamo l'effetto di filtraggio 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

spero che ti aiuti