¿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());
    }
}

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

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.


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!


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

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

2

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


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 

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.


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

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;

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)


-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);

¿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

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`
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.