none
Sacar el registro con la fecha maxima RRS feed

  • 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

    martes, 5 de julio de 2011 22:56

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

    Some guidelines for posting questions...

    miércoles, 6 de julio de 2011 0:55

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

    Some guidelines for posting questions...

    miércoles, 6 de julio de 2011 0:55
  • 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

    miércoles, 6 de julio de 2011 0:59
  • 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

    Some guidelines for posting questions...

    • Propuesto como respuesta Jaime65 viernes, 24 de mayo de 2019 19:26
    miércoles, 6 de julio de 2011 2:37
  • 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.



    miércoles, 6 de julio de 2011 3:21
  • 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

     

    miércoles, 6 de julio de 2011 23:39
  • Hunchback, muchas gracias, tu primer algoritmo (< 2005) me ayudo mucho, yo lo aplique en DB2, de hecho me urgía me estaban presionando con el resultado de un query y con esto quedo perfecto, enhorabuena!!!
    miércoles, 17 de mayo de 2017 23:54
  • Funciona también el segundo, gracias por compartir
    jueves, 3 de agosto de 2017 21:05