Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Seleccion de ultimo registro con SQL (https://www.clubdelphi.com/foros/showthread.php?t=64858)

odrack 22-04-2009 22:34:19

Seleccion de ultimo registro con SQL
 
Un saludo a todos en el foro.

Tengo una aplicación en la que tengo que seleccionar el ultimo registro para obtener el siguiente, el problema que tengo es que la base contiene muchos registros y cada ves se hace mas lenta la busqueda, esto lo hago de la siguiente forma:

Código Delphi [-]
query1.close;
query1.sql.clear;
query1.sql.text:='Select referencia from ticket order by referencia';
query1.execSQL;
query1.open;
query1.last;

Con esto consigo obtener el ultimo registro por medio de delphi, mi pregunta es ¿Hay alguna forma de obtenerlo mediante la sentencia de SQL?

jhonny 22-04-2009 23:10:31

Prueba con la siguiente consulta y nos cuentas como te va:

Código SQL [-]
select referencia from ticket order by referencia rows 1

odrack 22-04-2009 23:15:07

al hacer la consulta me da un error en row 1

gracias jhonny

jhonny 22-04-2009 23:16:34

Cita:

Empezado por odrack (Mensaje 345869)
al hacer la consulta me da un error en row 1

gracias jhonny

¿Que motor estas utilizando?

ContraVeneno 22-04-2009 23:21:50

¿la referencia es un número?

Código SQL [-]
Select Max(Referencia) From Ticket

Neftali [Germán.Estévez] 22-04-2009 23:31:29

Código Delphi [-]
query1.sql.text:='Select TOP 1 referencia from ticket order by referencia';

odrack 22-04-2009 23:39:06

Utilizo MySql, lo que quiero de esta consulta es que me devuelva todos los campos del ultimo registro, gracias por la respuesta ContraVeneno pero creo que debi mencionar que necesito recuperar todos los campos

GRacias

Neftali [Germán.Estévez] 22-04-2009 23:45:10

Código Delphi [-]
query1.sql.text:='Select TOP 1 * from ticket order by referencia';

odrack 22-04-2009 23:45:47

Gracias a todos por el apoyo, he resuelto el problema que tenia con esta sentencia:

Código SQL [-]
select * from ticket  where referencia = (select max(referencia) from ticket)

Neftali [Germán.Estévez] 22-04-2009 23:57:33

Código Delphi [-]
query1.sql.text:='Select TOP 1 * from ticket order by referencia DESC';

Debería ser lo mismo y consumir bastante menos que la anterior.

jhonny 22-04-2009 23:58:25

Cita:

Empezado por odrack (Mensaje 345884)
Gracias a todos por el apoyo, he resuelto el problema que tenia con esta sentencia:

Código SQL [-]select * from ticket where referencia = (select max(referencia) from ticket)

Que bien, pero apuesto que si nos dijeras que motor utilizas, seguramente alguien encontraría una mejor solución.

Neftali [Germán.Estévez] 23-04-2009 00:03:17

Cita:

Empezado por jhonny (Mensaje 345887)
si nos dijeras que motor utilizas

Cita:

Empezado por odrack (Mensaje 345882)
Utilizo MySql

Creo que lo dijo un poco más arriba...
;);););)

rgstuamigo 23-04-2009 00:04:24

Cita:

Empezado por odrack (Mensaje 345882)
Utilizo MySql, lo que quiero de esta consulta es que me devuelva todos los campos del ultimo registro, gracias por la respuesta ContraVeneno pero creo que debi mencionar que necesito recuperar todos los campos

GRacias

Código SQL [-]
select * from ticket order by referencia desc  Limit 1;
Pruebalo....:cool:

jhonny 23-04-2009 00:09:00

Cita:

Empezado por Neftali (Mensaje 345890)
Creo que lo dijo un poco más arriba...
;);););)

:eek:, tendré que comenzar a ponerme gafas :cool:, pues si... la respuesta de rgstuamigo, debe funcionar correctamente.

rgstuamigo 23-04-2009 00:14:01

Cita:

Empezado por jhonny (Mensaje 345893)
:eek:, tendré que comenzar a ponerme gafas :cool:, pues si... la respuesta de rgstuamigo, debe funcionar correctamente.

Pues si amigo jhony segun entendi referencia debe ser la llave principal.
Ahora si quiero el primer registro tan solo cambio esto:
Código SQL [-]
select * from ticket order by referencia asc  Limit 1;
Aunque mysql ya lo ordena por defecto en forma asc.;)

Edito:Complementando tambien se podria hacer lo siguiente:
Si quiero el solo el segundo:
Código SQL [-]
select * from ticket   Limit 1,1;
Si quiero el tercero:
Código SQL [-]
select * from ticket   Limit 2,1;
Si quiero a partir del 5to. hacia el decimo;
Código SQL [-]
select * from ticket   Limit 4,5;
Etc,etc, Todo lo hace con la clausula Limit
Saludos...;)

odrack 23-04-2009 01:28:56

Gracias rgstuamigo, es verdad que consigo el mismo resultado y quiero entender que consume menos recursos y tiempo a diferencia de como lo habia puesto o estoy mal??


La franja horaria es GMT +2. Ahora son las 11:44:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi