PDA

Ver la Versión Completa : Seleccion de ultimo registro con SQL


odrack
22-04-2009, 22:34:19
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:


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:

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
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?


Select Max(Referencia) From Ticket

Neftali [Germán.Estévez]
22-04-2009, 23:31:29
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
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:

select * from ticket where referencia = (select max(referencia) from ticket)

Neftali [Germán.Estévez]
22-04-2009, 23:57:33
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
Gracias a todos por el apoyo, he resuelto el problema que tenia con esta sentencia:

Código SQL [-] (http://www.clubdelphi.com/foros/#)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
si nos dijeras que motor utilizas
Utilizo MySql

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

rgstuamigo
23-04-2009, 00:04:24
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
select * from ticket order by referencia desc Limit 1;
Pruebalo....:cool:

jhonny
23-04-2009, 00:09:00
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
: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:
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:
select * from ticket Limit 1,1;
Si quiero el tercero:
select * from ticket Limit 2,1;
Si quiero a partir del 5to. hacia el decimo;
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??