Consulta sql

Angel F
19 de Mayo del 2002
Tengo una tabla de la siguiente forma: Id(numérico), fecha, nombre (string) con, p.e. los siguientes datos:
1, 10/01/2002, angel
2, 11/01/2002, maría
1, 21/01/2002, luis
3,9/01/2002, mario
1, 31/01/2002, antonio
3,19/01/2002, elena

Lo que necesito es una consulta que me devuelva para cada id la última fecha introducida y el nombre correspondiente, o sea con el ejemplo me quedase lo siguiente:
1, 31/01/2002, antonio
2, 11/01/2002, maría
3,19/01/2002, elena
Gracias de antemano por la ayuda

spade
19 de Mayo del 2002
Hola :-)

En el problema que vos planteas hay una cuestion que no me queda clara y es la siguiente,

¿Porque el numero ID no guarda relacion con cada uno de los nombres que tenes en la tabla?

O sea, estas utilizando el mismo numero ID para distintos nombres,



ID Fecha Nombre
--------------------------------
1 10/01/2002 angel
2 11/01/2002 maría
-> 1 21/01/2002 luis
3 09/01/2002 mario
-> 1 31/01/2002 antonio
-> 3 19/01/2002 elena

Los numeros nombres ¿no deberian estar de la siguiente forma por ejemplo?


ID Fecha Nombre
--------------------------------
1 10/01/2002 angel
2 11/01/2002 maría
1 21/01/2002 angel <-- Mismo ID mismo nombre que antes
3 09/01/2002 mario
1 31/01/2002 angel <-- Mismo ID mismo nombre que antes
3 19/01/2002 mario <-- Mismo ID mismo nombre que antes

Si estoy en lo correcto con lo que te planteo y modificas tu tabla como te comento la siguiente sentencia SQL te funcionara:


select id, max( fecha ), nombre from tabla group by id, nombre

Si no queres modificar la tabla proba la siguiente sentencia y vas a ver que hace

select id, max( fecha ) from tabla group by id

fijate que le saque la columna nombre.

Espero que te sirva

ja_andujar
19 de Mayo del 2002
No lo he probado, pero creo que seria algo asi:
select *
from <tabla>
where fecha in (select max(fecha)
from <tabla>
group by id)
order by id;

Angel
19 de Mayo del 2002
Ya lo he probado pero no me ha funcionado,lo que hace es devolverme toda la tabla. Gracias

Adolfo
19 de Mayo del 2002
Yo tampoco lo he probado pero creo que es tan sencillo como:
select id,nombre,max(fecha)
from tabla
group by id,nombre

daniel
19 de Mayo del 2002
creo que una de las solución es:

SELECT tabla.id, First(tabla.NOMB) AS nom, First(tabla.fecha) AS fec
FROM tabla
WHERE tabla.fecha=(SELECT Max(SZD.fecha) FROM tabla SZD
WHERE SZD.id=tabla.id)
GROUP BY tabla.id;

jceular
19 de Mayo del 2002
Podría ser algo así:
select distinct(id),fecha,nombre from tabla
order by fecha desc;
//No lo he comprobado