none
Registro anterior en una consulta...

    Question

  • Buen dia... quiero traerme el registro anterior de una tabla... es el puesto...

    select cb_codigo, cb_puesto, cb_fecha from kardex where cb_codigo=3

    el resultado es

    cb_codigo, cb_puesto, cb_fecha

    3, 103, 01/24/2000

    3,55,03/06/2003

    3,10,01/01/2012

    quiero traerme el valor anterior al último...ya tengo el ultimo valor... con el max

    select max(cb_codigo), max(cb_puesto), max(cb_fecha) from kardex where cb_codigo=3

    3,10,01/01/2012

    como le puedo hacer para traerme el registro anterior?

    3,55,03/06/2003

    Disculpen pero estoy iniciandome en esto...


    Muchas Gracias

    Tuesday, March 13, 2012 4:07 PM

Answers

  • Como te dice arlos el concepto anterior implica un orden, yo supongo que te refieres al puesto anterior ordenado por fecha si es así

    sería algo así (sin probar porque no nos pones los scripts)

    select * from (
    select cb_codigo, cb_puesto, cb_fecha, row_number() over(partition by cb_codigo order by cbfecha desc) fila from kardex where 
    cb_codigo=3
    ) a where fila=2


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marked as answer by LiS1903 Wednesday, March 14, 2012 4:02 PM
    Wednesday, March 14, 2012 3:56 PM
    Moderator
  • Ademas de la sugerencia de Miguel, en este caso en especifico, puedes usar el operador TOP de forma consecutiva. La una para traer las dos filas en orden descendiente y luego traer la primera en orden ascendente.

    select top (1) *
    from (
    select top (2) cb_codigo, cb_puesto, cb_fecha
    from kardex
    where cb_codigo=3
    order by cb_fecha desc) as T
    order by cb_fecha;

    Si estuvieses usando SS 2012, entonces pudieras usar la nueva funcionalidad de paginacion que se adiciono a la clausula ORDER BY, que es OFFSET ... FETCH.

    select cb_codigo, cb_puesto, cb_fecha
    from kardex
    where cb_codigo = 3
    order by cb_fecha desc
    offset 1 rows
    fetch next 1 rows only;


    AMB

    Some guidelines for posting questions...

    • Edited by HunchbackMVP Wednesday, March 14, 2012 5:32 PM
    • Marked as answer by LiS1903 Wednesday, March 14, 2012 6:02 PM
    Wednesday, March 14, 2012 5:31 PM

All replies

  • Define mejor "registro anterior", ya que a menos que especifiques tú el orden, en un conjunto de datos no hay nada que indique cuál es el primero ni cuál el último
    Tuesday, March 13, 2012 4:28 PM
  • Gracias por tu tiempo, lo que estoy tratando de obtener, es el anterior registro al último, es decir, en el kardex de un empleado, tengo el ultimo puesto (actual), bueno el que quiero es el anterior....entonces, ya se como sacar el registro el ultimo, pero quisiera saber como puedo sacar el anterior... muchas gracias

    Muchas Gracias

    Tuesday, March 13, 2012 4:31 PM
  • Como te dice arlos el concepto anterior implica un orden, yo supongo que te refieres al puesto anterior ordenado por fecha si es así

    sería algo así (sin probar porque no nos pones los scripts)

    select * from (
    select cb_codigo, cb_puesto, cb_fecha, row_number() over(partition by cb_codigo order by cbfecha desc) fila from kardex where 
    cb_codigo=3
    ) a where fila=2


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marked as answer by LiS1903 Wednesday, March 14, 2012 4:02 PM
    Wednesday, March 14, 2012 3:56 PM
    Moderator
  • muchas gracias miguel... me sirvio mucho tu ejemplo...

    saludos


    Muchas Gracias

    Wednesday, March 14, 2012 4:02 PM
  • Ademas de la sugerencia de Miguel, en este caso en especifico, puedes usar el operador TOP de forma consecutiva. La una para traer las dos filas en orden descendiente y luego traer la primera en orden ascendente.

    select top (1) *
    from (
    select top (2) cb_codigo, cb_puesto, cb_fecha
    from kardex
    where cb_codigo=3
    order by cb_fecha desc) as T
    order by cb_fecha;

    Si estuvieses usando SS 2012, entonces pudieras usar la nueva funcionalidad de paginacion que se adiciono a la clausula ORDER BY, que es OFFSET ... FETCH.

    select cb_codigo, cb_puesto, cb_fecha
    from kardex
    where cb_codigo = 3
    order by cb_fecha desc
    offset 1 rows
    fetch next 1 rows only;


    AMB

    Some guidelines for posting questions...

    • Edited by HunchbackMVP Wednesday, March 14, 2012 5:32 PM
    • Marked as answer by LiS1903 Wednesday, March 14, 2012 6:02 PM
    Wednesday, March 14, 2012 5:31 PM
  • muchas gracias... me ayudo mucho tambien la ayuda de Hunchback...!!!... aprendiiiii...:)

    Muchas Gracias

    Thursday, March 15, 2012 2:22 PM