Ti manca un GROUP BY clausola per il tuo MAX() aggregato. Il motivo per cui hai ottenuto la risposta corretta 12 perché il tuo primo tentativo di query è stato semplicemente perché quello sembra essere l'ID più grande nella tabella mentre per coincidenza appartiene anche a emp_id = 1 . Avresti ottenuto lo stesso risultato per qualsiasi emp_id i valori. Un GROUP BY la clausola risolverà questo problema.
Ecco un esempio che recupera l'intera riga per il record associato:
SELECT * FROM timeclock
WHERE id = (SELECT MAX(id) AS id FROM timeclock WHERE emp_id = 1 GROUP BY emp_id);
Questo può essere fatto anche con un HAVING clausola, non necessita della sottoquery:
SELECT action
FROM timeclock
WHERE emp_id = 1
GROUP BY emp_id
HAVING id = MAX(id);
Per riferimento, il riferimento alle funzioni aggregate di MySQL.