Chybí vám GROUP BY klauzule pro váš MAX() agregát. Důvod, proč jste dostali správnou odpověď 12 váš první pokus o dotaz byl pouze proto, že je to náhodou největší ID v tabulce a zároveň shodou okolností patří do emp_id = 1 . Stejný výsledek byste získali pro jakékoli emp_id hodnoty. A GROUP BY klauzule to vyřeší.
Zde je příklad načtení celého řádku pro přidružený záznam:
SELECT * FROM timeclock
WHERE id = (SELECT MAX(id) AS id FROM timeclock WHERE emp_id = 1 GROUP BY emp_id);
To lze také provést pomocí HAVING klauzule, která nepotřebuje poddotaz:
SELECT action
FROM timeclock
WHERE emp_id = 1
GROUP BY emp_id
HAVING id = MAX(id);
Pro informaci odkaz na agregační funkce MySQL.