¿Cómo haría algo como esto?
Fila SELECT de SQL de la tabla DONDE id = max (id)
¿Cómo haría algo como esto?
Fila SELECT de SQL de la tabla DONDE id = max (id)
Respuestas:
Podría usar una subselección:
SELECT row
FROM table
WHERE id=(
SELECT max(id) FROM table
)
Tenga en cuenta que si el valor de max(id)
no es único, se devuelven varias filas.
Si solo desea una de esas filas, use la respuesta de @ MichaelMior,
SELECT row from table ORDER BY id DESC LIMIT 1
id
es solo una columna en una tabla. No hay garantía de que los valores en la id
columna tengan que ser únicos.
id
no es una clave primaria o única :) Dado el nombre, existe una posibilidad razonable de que lo sea. También vale la pena señalar que, dependiendo del DBMS que esté utilizando, el enfoque con la subselección puede ser mucho menos eficiente.
id
podría ser una clave externa, en cuyo caso puede no ser única. Hice algunos benchmarking usando set profiling = 1; ...; show profiles
y parece que nuestras soluciones tienen el mismo rendimiento usando MySQL. Que yo sepa, ¿sabe qué DBMS tiene un rendimiento inferior para las subselecciones?
También podrías hacer
SELECT row FROM table ORDER BY id DESC LIMIT 1;
Esto ordenará las filas por su ID en orden descendente y devolverá la primera fila. Esto es lo mismo que devolver la fila con la ID máxima. Por supuesto, esto supone que id
es único entre todas las filas. De lo contrario, podría haber varias filas con el valor máximo para id
y solo obtendrá una.
SELECT *
FROM table
WHERE id = (SELECT MAX(id) FROM TABLE)
SELECT entry FROM table WHERE id = MAX(id)
funcionaría ?!
SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified WHERE account_email = :account_email)
por el cual solo necesito la entry_time
entrada más reciente en la base de datos. ¿Es esa declaración suficiente o debería ser:SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified) AND account_email = :account_email
No se puede dar order by
porque order by
hace un "escaneo completo" en una mesa.
La siguiente consulta es mejor:
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
ORDER BY
no realizará un análisis completo si supone que esa id
es la clave principal de la tabla. (Y si no lo es, tiene un nombre bastante pobre). Si no lo es, ¿cómo espera MAX(id)
trabajar sin un escaneo completo de la tabla? Si no hay índice, todos los valores deben ser verificados para encontrar el máximo.
Siempre se pueden elegir funciones analíticas, lo que le dará más control.
select tmp.row from ( select row, rank() over(partition by id order by id desc ) as rnk from table) tmp where tmp.rnk=1
Si tiene problemas con la función rank () dependiendo del tipo de datos, entonces también puede elegir entre row_number () o dense_rank ().
Intenta con esto
SELECT top 1 id, Col2, row_number() over (order by id desc) FROM Table