Il manque un GROUP BY
clause pour votre MAX()
agrégat. La raison pour laquelle vous avez obtenu la bonne réponse 12
pour votre première tentative de requête était simplement parce qu'il s'agit du plus grand ID de la table tout en appartenant par coïncidence à emp_id = 1
. Vous auriez obtenu le même résultat pour n'importe lequel des emp_id
valeurs. Un GROUP BY
la clause arrangera ça.
Voici un exemple récupérant toute la ligne de l'enregistrement associé :
SELECT * FROM timeclock
WHERE id = (SELECT MAX(id) AS id FROM timeclock WHERE emp_id = 1 GROUP BY emp_id);
Cela peut aussi être fait avec un HAVING
clause, ne nécessitant pas la sous-requête :
SELECT action
FROM timeclock
WHERE emp_id = 1
GROUP BY emp_id
HAVING id = MAX(id);
Pour référence, la référence des fonctions d'agrégation MySQL.