¿Cómo seleccionar el último registro de una tabla en SQL?

133

Este es un código de muestra para seleccionar todos los registros de una tabla. ¿Alguien puede mostrarme cómo seleccionar el último registro de esa tabla?

select * from table

Cuando uso: SELECT * FROM TABLE ORDER BY ID DESC LIMIT me sale este error: Línea 1: sintaxis incorrecta cerca de 'LIMIT'. Este es el código que uso:

private void LastRecord()
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HELPDESK_OUTLOOKConnectionString3"].ToString());

    conn.Open();
    SqlDataReader myReader = null;
    SqlCommand myCommand = new SqlCommand("SELECT * FROM HD_AANVRAGEN ORDER BY " +
                "aanvraag_id DESC LIMIT 1", conn);
    myReader = myCommand.ExecuteReader();
    while (myReader.Read())
    {
        TextBox1.Text = (myReader["aanvraag_id"].ToString());
        TextBox1.Text += (myReader["wijziging_nummer"].ToString());
        TextBox1.Text += (myReader["melding_id"].ToString());
        TextBox1.Text += (myReader["aanvraag_titel"].ToString());
        TextBox1.Text += (myReader["aanvraag_omschrijving"].ToString());
        TextBox1.Text += (myReader["doorlooptijd_id"].ToString());
        TextBox1.Text += (myReader["rapporteren"].ToString());
        TextBox1.Text += (myReader["werknemer_id"].ToString());
        TextBox1.Text += (myReader["outlook_id"].ToString());
    }
}
Tassisto
fuente
Bueno, tienes que pedir algo. ¿Tienes una clave primaria? Quizás una identificación?
alexn
¿Qué quieres decir con "último registro"? ¿Con el valor más alto de la columna de clave principal?
Marcin Wroblewski

Respuestas:

337

Sin más información, qué base de datos, etc., lo mejor que podemos hacer es algo como

Servidor SQL

SELECT TOP 1 * FROM Table ORDER BY ID DESC

MySql

SELECT * FROM Table ORDER BY ID DESC LIMIT 1
Adriaan Stander
fuente
1
top 1 tomará el primero, ¿no?
Tassisto
30
Sí, pero es por eso que ordena por DESC
Adriaan Stander
3
Pero si utilizó el pedido de DESC para un millón de registros, ralentizará su consulta @AdriaanStander
Charles Hernandez
1
El mysql también funciona con el servidor sql. Es un comando genérico sql.
azhar22k
1
@ itz-azhar: la forma MySQL de esta consulta no es un comando SQL genérico; la LIMITpalabra clave es una extensión de SQL que solo implementan algunos RDBMS; en particular, Oracle no tiene una LIMITpalabra clave
landru27
23

Suponiendo que tiene una columna Id:

SELECT TOP 1 *
  FROM table
 ORDER
    BY Id DESC;

Además, esto funcionará en SQL Server. Creo que MySQL podría necesitar usar:

SELECT *
  FROM table
 ORDER
    BY Id DESC
 LIMIT 1

Pero no estoy 100% seguro de esto.

EDITAR

Mirando las otras respuestas, ahora estoy 100% seguro de que estoy en lo correcto con la declaración MySQL: o)

EDITAR

Acabo de ver tu último comentario. Podrías hacerlo:

SELECT MAX(Id)
  FROM table

Esto te dará el número de identificación más alto.

Neil Knight
fuente
2
SELECCIONAR MÁXIMO (id) DE los datos ¡Funciona perfecto!
Ricardo Fercher
15

para obtener la última fila de una base de datos SQL, use esta cadena sql:

SELECT * FROM TableName WHERE id=(SELECT max(id) FROM TableName);

Salida:

Última línea de tu base de datos!

Ricardo Fercher
fuente
3
Funciona completamente bien con Oracle también y es más rápido que la clasificación
MaKiPL
Este es el mejor. Sin clasificación, sin "TOP 1", solo consultas compatibles y efectivas. Perfecto.
Matt F.
7
SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

Sí, esto es mysql, SQL Server:

SELECT TOP 1 * FROM Table ORDER BY ID DESC
Simón
fuente
esto da un error! Pensé que esto es SQL pero es MySQL
Tassisto
1
Editado en SQL Server, sin embargo, no especificó su DBMS en la pregunta.
Simon
3
SELECT * FROM table ORDER BY Id DESC LIMIT 1

fuente
2

El último es solo el primero cuando invierte su pedido.

jeje
fuente
1

Siempre es una buena práctica en el diseño de su tabla tener un identificador de fila automático, como

 [RowID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL

, entonces puede identificar su última fila por

 select * from yourTable where rowID =  @@IDENTITY 
Jenna Leaf
fuente
Este es un truco genial, para 2M + registros es súper rápido (al menos en mi caso) Gracias
Jeancarlo Fontalvo hace
0

En Oracle, puedes hacer:

SELECT *
FROM (SELECT EMP.*,ROWNUM FROM EMP ORDER BY ROWNUM DESC)
WHERE ROWNUM=1;

Esta es una de las formas posibles.

GeeDee
fuente
0
select ADU.itemid, ADU.startdate, internalcostprice 
from ADUITEMINTERNALCOSTPRICE ADU

right join

   (select max(STARTDATE) as Max_date, itemid 
   from ADUITEMINTERNALCOSTPRICE
   group by itemid) as A

on A.ITEMID = ADU.ITEMID
and startdate= Max_date
Panjas51
fuente
1
Bienvenido a stackoverflow. Además de la respuesta que ha proporcionado, considere proporcionar una breve explicación de por qué y cómo soluciona el problema.
jtate
0

Creo que esto debería hacerlo.

declare @x int;
select @x = max(id) from table_name;
select * from where id = @x;
Chanuka Fernando
fuente
0

Si tiene un campo de auto-incremento (digamos ID) entonces puede hacer algo como: SELECT * FROM foo WHERE ID = (SELECT max(ID) FROM foo)

Bostone
fuente
-1
$sql="SELECT tot_visit FROM visitors WHERE date = DATE(NOW()) - 1 into @s                
$conn->query($sql);
$sql = "INSERT INTO visitors (nbvisit_day,date,tot_visit) VALUES (1,CURRENT_DATE,@s+1)";
$conn->query($sql);
Hani Charara
fuente
¿Leíste la pregunta cuidadosamente? ¿Cómo se INSERTrelaciona un nuevo valor con "cómo seleccionar el último registro de esa tabla"?
landru27
2
¡Bienvenido a Stack Overflow! Gracias por el fragmento de código, que podría proporcionar una ayuda limitada e inmediata. Una explicación adecuada mejoraría en gran medida su valor a largo plazo al describir por qué esta es una buena solución al problema, y ​​la haría más útil para futuros lectores con otras preguntas similares. Edite su respuesta para agregar alguna explicación, incluidas las suposiciones que ha hecho.
Sepehr
No escriba código específico de php cuando OP solo ha preguntado sobre el lenguaje SQL.
Steve Moretz
-1

También puedes hacer algo como esto:

SELECT LAST (column_name) AS LAST_CUSTOMER FROM table_name;

vikas95prasad
fuente
Debe tener en cuenta que la última función () solo es compatible con MS Access javatpoint.com/sql-select-last
malik
-1

Voté a Ricardo. En realidad, max es mucho más eficiente que la clasificación. Mira las diferencias. es excelente.

Tenía que obtener la última fila / registro de actualización (timeStamp)

`sqlite> select timeStamp from mypadatav2 order by timeStamp desc limit 1;
 2020-03-11 23:55:00
 Run Time: real 1.806 user 1.689242 sys 0.117062`

`sqlite> select max(timeStamp) from mypadatav2;
 2020-03-11 23:55:00
 Run Time: real 0.553 user 0.412618 sys 0.134340`
usuario12403395
fuente