Brakuje elementu GROUP BY klauzula dla twojego MAX() agregat. Powód, dla którego otrzymałeś poprawną odpowiedź 12 Twoja pierwsza próba zapytania była po prostu dlatego, że jest to największy identyfikator w tabeli, a jednocześnie przypadkowo należący do emp_id = 1 . Otrzymałbyś ten sam wynik dla każdego z emp_id wartości. GROUP BY klauzula rozwiąże ten problem.
Oto przykład pobierania całego wiersza dla powiązanego rekordu:
SELECT * FROM timeclock
WHERE id = (SELECT MAX(id) AS id FROM timeclock WHERE emp_id = 1 GROUP BY emp_id);
Można to również zrobić za pomocą HAVING klauzula, nie wymagająca podzapytania:
SELECT action
FROM timeclock
WHERE emp_id = 1
GROUP BY emp_id
HAVING id = MAX(id);
Dla porównania, odniesienie do funkcji agregujących MySQL.