PDA

Ver la Versión Completa : select


dmagui
17-06-2005, 20:30:00
Buenas Tardes:


De casualidad alguno sabe cual es la instruccion para seleccionar el ultimo registro que se encuentra en una tabla por ejemplo en una tabla producto.

Gracias, es que he buscado esa instruccion y no se, para ser mas especificos que me muestre el codigo del ultimo cliente que cree.

maeyanes
17-06-2005, 20:35:24
Depende mucho del campo clave de tu tabla. Si es numérico y autoincremental, podrías intentar algo como:

select max(campo_clave), nombre from clientes

delphi.com.ar
17-06-2005, 20:45:12
Según tengo entendido, los motores ANSI92 no garantizan el orden de los registros. Por eso si queremos tener un orden estricto, tenemos que tener un campo por donde ordenarlos lógicamente. Para obtener un último registro de este tipo:

SELECT *
FROM TABLA
WHERE ID = (SELECT MAX(ID) FROM TABLA)

Saludos!

dmagui
17-06-2005, 20:46:10
Gracias por la respuesta,
pero al intentar esta instruccion no me funciono, lo que pasa es que estoy manejando esta instruccion en un dataset, no se si hay varie in poco la instruccion.

roman
17-06-2005, 21:23:09
La instrucción que te indica Federico quizá no sirva en tu versión de MySql. Las subconsultas en MySql aparecieron hasta la versión 4 y cachito creo.

De ser así podrías intentar algo como:



select * from tabla
order by id desc limit 1


y simplemente tomar el primer y único registro devuelto.

Por cierto, un título como "Seleccionar el último registro" hubiera sido mucho más adecuado para el hilo.

// Saludos

dmagui
17-06-2005, 21:55:43
ese limit 1 a que se refiere, lo que pasa es que me sale un error diciendo que no recomoce limit 1.

roman
17-06-2005, 22:05:35
me sale un error diciendo que no recomoce limit 1.

¿Realmente estamos hablando de MySql?

// Saludos

dmagui
17-06-2005, 22:07:14
Gracias me funciono de maravilla

roman
17-06-2005, 22:24:32
¿Y se puede saber qué pasó entre


ese limit 1 a que se refiere, lo que pasa es que me sale un error diciendo que no recomoce limit 1.


y


me funciono de maravilla



:confused:

// Saludos

el_barto
17-06-2005, 22:47:18
Es mas facil asi:
IBDataSet.last y segurito te muestra el ultimo registro

roman
17-06-2005, 22:56:04
Es mas facil asi:
IBDataSet.last y segurito te muestra el ultimo registro

¡Oh no!

Esto puede ser muy costoso. Muchos servidores SQL van mandando los registros al cliente conforme se van solicitando. Una operación como Last obliga al servidor a mandar todos los registros. Si se trata de miles de registros, esta simple operación puede demorar batante.

// Saludos

dmagui
17-06-2005, 22:57:46
Lo que pasa es que me funciono como lo dijo Federico, no me arrojo ningun error

dmagui
20-06-2005, 20:57:33
Tienes razon en algo, lo probe como federico me dijo, pero me di cuenta que esto solo me sirve cuando el codigo del producto es autoincremental, pero si no lo es no me sirve porque no me muestra cual fue el ultimo registro que cree, hay alguna forma que esto me lo muestre y que me sirva para las sentencias SQL que se maneja para delphi en el Dataset.

delphi.com.ar
21-06-2005, 14:38:42
Reitero mis palabras:
Según tengo entendido, los motores ANSI92 no garantizan el orden de los registros. Por eso si queremos tener un orden estricto, tenemos que tener un campo por donde ordenarlos lógicamente.

el_barto
21-06-2005, 15:04:55
Y por que no creas una bandera y que esta sea autoincremental y le aplicas el codigo que te dijo Fede pero buscas es el valor maximo de la bandera:

SELECT *FROM TABLAWHERE ID = (SELECT MAX(bandera) FROM TABLA) De este modo no importa el orden en que ingreses los codigos siempre te va a mostrar el ultimo registro que ingresaste por que le estas haciendo el MAX de la bandera. :D

Tienes que crear un generator y un trigger para que la bandera sea autoincremental y se dispare antes de la inserccion es decir un Before insert

Espero sirva de algo chao ;)

johncook
22-06-2005, 16:10:27
Citar:
Originalmente publicado por el_barto
Es mas facil asi:
IBDataSet.last y segurito te muestra el ultimo registro

¡Oh no!

Esto puede ser muy costoso. Muchos servidores SQL van mandando los registros al cliente conforme se van solicitando. Una operación como Last obliga al servidor a mandar todos los registros. Si se trata de miles de registros, esta simple operación puede demorar batante.
Roman: Ya que estamos en el tema quisiera que me saques una duda..
Cuando realizo un Locate, sobre un componente TTable, el servidor me envía todos los registros de la tabla al cliente, no?¨
Saludos.
Gracias.

roman
22-06-2005, 16:26:48
La verdad, no lo sé. Supongo que sí pero no lo aseguro.

Por otra parte, en mi opinión este tema es algo que no debiera preocupar. Muchos recomiendan que las consultas deben de por sí acotarse de manera que no regresen demasiados registros. Ha quedado, yo creo que por razones históricas, una idea de querer ver un DBGrid con miles y miles de líneas y desplazarse por él hasta encontrar el registro deseado, cuando resulta más eficiente dar al usuario métodos para establecer criterios de búsqueda adecuados acotando así la cantidad de registros devueltos a una cantidad manejable desde el cliente.

// Saludos