Consulta sql
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
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
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
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
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;
select *
from <tabla>
where fecha in (select max(fecha)
from <tabla>
group by id)
order by id;
Ya lo he probado pero no me ha funcionado,lo que hace es devolverme toda la tabla. Gracias
Yo tampoco lo he probado pero creo que es tan sencillo como:
select id,nombre,max(fecha)
from tabla
group by id,nombre
select id,nombre,max(fecha)
from tabla
group by id,nombre
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;
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;
