Principales respuestas
Sacar el registro con la fecha maxima

Pregunta
-
Que tal tengo estos datos, y he estao batallando para sacar en sql, cual es el registro que tiene la fecha mayor, y claro saber a que traspaso pertenece
Alguna sugerencia?
Gracias
cod Mod fecha traspaso 101 DE 2011-06-07 18:17 MC 101 DI 2011-03-18 18:58 AL 101 PE 2011-05-26 17:30 PH
Respuestas
-
Cual version de SQL Server usas?
Si usas 2005 o mayor, entonces puedes usar una funcion de rango (ranking function), de lo contrario tendras que usar una tabla derivada con la fecha mayor agrupada por la columna [cod], y luego unir esta a la tabla original por ambas columnas.
-- < 2005
select
T.cod,
T.fecha,
T.mod,
T.traspaso
from
T
inner join
(
select cod, max(fecha) as max_fecha
from T
group by cod
) as R
on T.cod = R.cod
and T.fecha = R.max_fecha;-- 2005 o mayor
with rs as (
select cod, mod, fecha, traspaso, row_number() over(partition by cod order by fecha DESC) as rn
from T
)
select cod, mod, fecha, traspaso
from rs
where rn = 1;Para este ultimo, es de mucha ayuda un indice ordenado por la columna(s) de la particion, seguido de las columnas por las que se ordena, e incluir alguna otra columna que sea referenciada.
(cod, fecha) include (mod, traspaso)
AMB
- Marcado como respuesta The Apprentice in WEB miércoles, 6 de julio de 2011 23:39
Todas las respuestas
-
Cual version de SQL Server usas?
Si usas 2005 o mayor, entonces puedes usar una funcion de rango (ranking function), de lo contrario tendras que usar una tabla derivada con la fecha mayor agrupada por la columna [cod], y luego unir esta a la tabla original por ambas columnas.
-- < 2005
select
T.cod,
T.fecha,
T.mod,
T.traspaso
from
T
inner join
(
select cod, max(fecha) as max_fecha
from T
group by cod
) as R
on T.cod = R.cod
and T.fecha = R.max_fecha;-- 2005 o mayor
with rs as (
select cod, mod, fecha, traspaso, row_number() over(partition by cod order by fecha DESC) as rn
from T
)
select cod, mod, fecha, traspaso
from rs
where rn = 1;Para este ultimo, es de mucha ayuda un indice ordenado por la columna(s) de la particion, seguido de las columnas por las que se ordena, e incluir alguna otra columna que sea referenciada.
(cod, fecha) include (mod, traspaso)
AMB
- Marcado como respuesta The Apprentice in WEB miércoles, 6 de julio de 2011 23:39
-
Hola Apprentice, te sugiero el siguiente código:
SELECT fecha,traspaso
FROM NombreTabla
WHERE fecha=(SELECT MAX(fecha) FROM NombreTabla)
Saludos
geeks.ms/blogs/ghernandez
- Propuesto como respuesta Geovanny -Gio- Hernandez miércoles, 6 de julio de 2011 1:00
- Votado como útil Joyce_ACModerator jueves, 18 de mayo de 2017 14:08
-
Geovanny,
No creo que sea tan simple como eso, lo que desea quien posteo la pregunta. Yo entendi que desea obtener la fila con maxima fecha por cada grupo de filas con igual valor en la columna [cod].
Yo puedo estar equivocado, asi que si ese es el caso entonces seria mas facil usar el operator TOP en conjunto con la clausula ORDER BY.
select top (1) *
from T
order by fecha DESC;Para obtener todas filas con la mayor fecha, entonces solo bastaria usar la subclausula WITH TIES.
select top (1) with ties *
from T
order by fecha DESC;
AMB
- Propuesto como respuesta Jaime65 viernes, 24 de mayo de 2019 19:26
-
Hunchback, la verdad con lo que mencionas no lo veo tan claro, seria bueno que Apprentice lo aclarara , y en caso de que sea la opción simple si tienes razon con la solución que planteas, :-) y si es la otra claro que das buenas opciones.
Saludos.
-
Gracias a todos
HunchBack, use tu instruccion cuando se trata para sql < 2005 y trabajo muy bien, me saco el resultado que queria.
Estoy trabajandon con SQL 2008, de todos modos probare con la otra instruccion que mencionas para versiones > 2005 de SQL
Problema solucionado
OK
-
-