Get most recent row for given ID Get most recent row for given ID mysql mysql

Get most recent row for given ID


Use the aggregate MAX(signin) grouped by id. This will list the most recent signin for each id.

SELECT  id,  MAX(signin) AS most_recent_signinFROM tblGROUP BY id

To get the whole single record, perform an INNER JOIN against a subquery which returns only the MAX(signin) per id.

SELECT   tbl.id,  signin,  signoutFROM tbl  INNER JOIN (    SELECT id, MAX(signin) AS maxsign FROM tbl GROUP BY id  ) ms ON tbl.id = ms.id AND signin = maxsignWHERE tbl.id=1


SELECT *FROM   tblWHERE  id = 1ORDER  BY signin DESCLIMIT  1;

The obvious index would be on (id), or a multicolumn index on (id, signin DESC).

Conveniently for the case, MySQL sorts NULL values last in descending order. That's what you typically want if there can be NULL values: the row with the latest not-null signin.

To get NULL values first:

ORDER BY signin IS NOT NULL, signin DESC

You may want to append more expressions to ORDER BY to get a deterministic pick from (potentially) multiple rows with NULL.
The same applies without NULL if signin is not defined UNIQUE.

Related:

The SQL standard does not explicitly define a default sort order for NULL values. The behavior varies quite a bit across different RDBMS. See:

But there are the NULLS FIRST / NULLS LAST clauses defined in the SQL standard and supported by most major RDBMS, but not by MySQL. See:


Building on @xQbert's answer's, you can avoid the subquery AND make it generic enough to filter by any ID

SELECT id, signin, signoutFROM dTableINNER JOIN(  SELECT id, MAX(signin) AS signin  FROM dTable  GROUP BY id) AS t1 USING(id, signin)