En la siguiente tabla, ¿cómo obtengo solo el registro más reciente de id=1según la columna de inicio de sesión y no los 3 registros?
+----+---------------------+---------+
| id | signin | signout |
+----+---------------------+---------+
| 1 | 2011-12-12 09:27:24 | NULL |
| 1 | 2011-12-13 09:27:31 | NULL |
| 1 | 2011-12-14 09:27:34 | NULL |
| 2 | 2011-12-14 09:28:21 | NULL |
+----+---------------------+---------+

SELECT id, MAX(signin) FROM tbl GROUP BY id WHERE id=1;USINGlugar de explícitoON. Tienes un +1 :)SELECT * FROM tbl WHERE id = 1 ORDER BY signin DESC LIMIT 1;El índice obvia sería en
(id), o un índice de múltiples sobre(id, signin DESC).Convenientemente para el caso, MySQL ordena los
NULLvalores últimos en orden descendente. Eso es lo que normalmente desea si puede haberNULLvalores: la fila con el último no nulosignin.Para obtener
NULLvalores primero:Relacionado:
El estándar SQL no define explícitamente un orden de clasificación predeterminado para los
NULLvalores. El comportamiento varía bastante entre diferentes RDBMS. Ver:Pero no son los
NULLS FIRST/NULLS LASTlas cláusulas definidas en el estándar SQL y el apoyo de la mayoría de los RDBMS importantes, pero no por MySQL. Ver:fuente
SELECT TOP 1 *y elimine laLIMIT 1última línea. si usa SQL Server. Utilice lo anterior si MySQL o Postgres.Sobre la base de la respuesta de @ xQbert, puede evitar la subconsulta Y hacerla lo suficientemente genérica como para filtrar por cualquier ID
SELECT id, signin, signout FROM dTable INNER JOIN( SELECT id, MAX(signin) AS signin FROM dTable GROUP BY id ) AS t1 USING(id, signin)fuente
Select [insert your fields here] from tablename where signin = (select max(signin) from tablename where ID = 1)fuente
SELECT * FROM (SELECT * FROM tb1 ORDER BY signin DESC) GROUP BY id;fuente
Tuve un problema similar. Necesitaba obtener la última versión de la traducción del contenido de la página, en otras palabras, para obtener ese registro específico que tiene el número más alto en la columna de versión. Así que selecciono todos los registros ordenados por versión y luego tomo la primera fila del resultado (usando la cláusula LIMIT).
SELECT * FROM `page_contents_translations` ORDER BY version DESC LIMIT 1fuente
Manera simple de lograr
Sé que es una vieja pregunta.También puedes hacer algo como
SELECT * FROM Table WHERE id=1 ORDER BY signin DESCEn lo anterior, consulte el primer registro será el registro más reciente.
Para un solo registro, puede usar algo como
SELECT top(1) * FROM Table WHERE id=1 ORDER BY signin DESCLa consulta anterior solo devolverá un registro más reciente.
¡Salud!
fuente