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.