Ihnen fehlt ein GROUP BY
-Klausel für Ihr MAX()
Aggregat. Der Grund, warum Sie die richtige Antwort erhalten haben 12
denn Ihr erster Abfrageversuch lag lediglich daran, dass dies zufällig die größte ID in der Tabelle ist und zufällig auch zu emp_id = 1
gehört . Sie hätten dasselbe Ergebnis für alle emp_id
erhalten Werte. Ein GROUP BY
Klausel wird dies klären.
Hier ist ein Beispiel zum Abrufen der gesamten Zeile für den zugehörigen Datensatz:
SELECT * FROM timeclock
WHERE id = (SELECT MAX(id) AS id FROM timeclock WHERE emp_id = 1 GROUP BY emp_id);
Dies kann auch mit einem HAVING
erfolgen -Klausel, die die Unterabfrage nicht benötigt:
SELECT action
FROM timeclock
WHERE emp_id = 1
GROUP BY emp_id
HAVING id = MAX(id);
Als Referenz dient die Referenz zu den MySQL-Aggregatfunktionen.