Está faltando um
GROUP BY
cláusula para seu MAX()
agregar. O motivo pelo qual você acertou a resposta 12
para sua primeira tentativa de consulta foi apenas porque esse é o maior ID na tabela e, por coincidência, pertence a emp_id = 1
. Você teria obtido o mesmo resultado para qualquer um dos emp_id
valores. Um GROUP BY
cláusula resolverá isso. Aqui está um exemplo recuperando a linha inteira para o registro associado:
SELECT * FROM timeclock
WHERE id = (SELECT MAX(id) AS id FROM timeclock WHERE emp_id = 1 GROUP BY emp_id);
Isso também pode ser feito com um
HAVING
cláusula, não precisando da subconsulta:SELECT action
FROM timeclock
WHERE emp_id = 1
GROUP BY emp_id
HAVING id = MAX(id);
Para referência, a referência de funções agregadas do MySQL.