SQL traer registro mas reciente

Tengo un problema con la extracción de unos registros de una base de datos. Lo que intento hacer es traerme los registros mas recientes, la base está mas o menos así:

Tabla folios

folio              fecha               clave

1               01/09/2014         D001

2               09/09/2014         A215

3               15/09/2014         B002

Lo que quiero que me traiga la consulta es solo el registro mas reciente:

folio              fecha               clave

3               15/09/2014         B002

Probé con la siguiente consulta: 

select a.folio, max(a.fecha) as fecha2, a.clave

from folios a

group by a.folio, a.clave

Pero con esta consulta me sigue arrojando los mismos 3 registros:

folio              fecha               clave

1               01/09/2014         D001

2               09/09/2014         A215

3               15/09/2014         B002

1 Respuesta

Respuesta
3

Claro, sucede que la clausula "group by", agrupa por datos similares, y tu folio es distinto, es por eso que te muestra todo.

Para recuperar sólo el más reciente deberías hacer esto.

select top 1 folio, fecha, clave from folios order by fecha desc

Lo que la consulta hace es ordenarlo de forma descendente por fecha y mostrar sólo el primero.

Gracias por responder William, como le haría si quisiera el registro más reciente de cada uno de los datos de la columna nombre

Ejemplo:

Tabla folios

folio              fecha               clave      nombre

1               01/09/2014         D001         Juan

2               09/09/2014         A215         Pedro

3               15/09/2014         B002         Juan

Lo que me debería traer la consulta sería el registro más reciente de juan y el más reciente de pedro:

folio              fecha               clave      nombre

3               15/09/2014         B002         Juan

2               09/09/2014         A215         Pedro

De antemano te agradezco. Saludos!

select s2.folio, s1.fecha, s2. clave, s1.nombre
from
( select max(fecha) as fecha, nombre from folios group by nombre ) as s1
inner join
( select folio, fecha, clave, nombre from folios ) as s2
on s1.fecha = s2.fecha and s1.nombre = s2.nombre

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas