En la siguiente tabla, ¿cómo obtengo solo el registro más reciente de id=1
segú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;
USING
lugar 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
NULL
valores últimos en orden descendente. Eso es lo que normalmente desea si puede haberNULL
valores: la fila con el último no nulosignin
.Para obtener
NULL
valores primero:Relacionado:
El estándar SQL no define explícitamente un orden de clasificación predeterminado para los
NULL
valores. El comportamiento varía bastante entre diferentes RDBMS. Ver:Pero no son los
NULLS FIRST
/NULLS LAST
las 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 1
fuente
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 DESC
En 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 DESC
La consulta anterior solo devolverá un registro más reciente.
¡Salud!
fuente