Jump to content


Photo

Seleccionar últimos registros de una Tabla


  • Please log in to reply
30 replies to this topic

#21 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 03 September 2014 - 01:56 PM

Bueno, tuve que hacerle unos retoques finales. Parece que 2010 tiene sus cosillas respecto al 2013 con el tema de los corchetes en los JOINS y WHERE. Pero ya quedó.
La consulta final adaptada, para efectivamente recuperar la fecha apropiadamente es no ir por el máximo ID sino de la Fecha.

El monstruo que espero no tener que volver a nunca más en mi vida es:



sql
  1. SELECT TablaExptes.ExpteCod, TablaExptes.ExpteNro, TablaExptes.Descripción, TablaEstadosExpte.Nombre, TablaMovimientosExptes.FechaRevision
  2. FROM TablaEstadosExpte INNER JOIN (TablaExptes INNER JOIN TablaMovimientosExptes ON TablaExptes.[IdExpte] = TablaMovimientosExptes.[ExpteID]) ON TablaEstadosExpte.[IDEstado] = TablaMovimientosExptes.[EstadoID]
  3.  
  4. WHERE TablaMovimientosExptes.[FechaRevision] IN(SELECT MAX(TablaMovimientosExptes.[FechaRevision])
  5. FROM TablaMovimientosExptes
  6. GROUP BY TablaMovimientosExptes.ExpteID;);



Gracias Wilson. Me voy a tener que poner a estudiar y repasar SQL porque estoy por demás oxidado. Es casi un año sin tocar algo siquiera de programación. Mucho tiempo perdido.  :(

Saludos,
  • 0

#22 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 03 September 2014 - 02:08 PM

para efectivamente recuperar la fecha apropiadamente es no ir por el máximo ID sino de la Fecha.


Me alegra que resolviste el problema, yo me incliné por el máximo Id,  pensando en la remota posibilidad de que un expediente sea modificado más de una vez en una misma fecha.

El monstruo que espero no tener que volver a nunca más en mi vida


Si, el generador de consultas de  Access crea los INNER JOIN de una manera un tanto exótica.

Saludos.
  • 0

#23 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 03 September 2014 - 02:31 PM

....

Gracias Wilson. Me voy a tener que poner a estudiar y repasar SQL porque estoy por demás oxidado. Es casi un año sin tocar algo siquiera de programación. Mucho tiempo perdido.  :(

Saludos,


Y si pudieras olvidarte de Access... mejor !  :D :D :D :p :p :p

Saludox ! :)
  • 0

#24 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 03 September 2014 - 03:12 PM

Y si pudieras olvidarte de Access... mejor !  :D :D :D :p :p :p

Saludox ! :)

Guarda que Caral está vigilando...  :D

Es que la actividad a la que se pretende darle uso no merece gastar en más. Además ten en cuenta de que no tengo mis herramientas de trabajo como para desarrollar un sistema como la gente. Si quiere más, que me lo pague... y al paso que vamos... parece ser cada muerte de obizpo. Si se resiste a devolverme lo que con esfuerzo me he ganado estoy decidido a ir a por medios legales e incluso a pedir daños morales y emocionales (que hay que tener cabeza para aguantar un tipo tan detestable). Por que la cosa no da para más.  :@

Saludos,
  • 0

#25 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 03 September 2014 - 04:07 PM


....

Gracias Wilson. Me voy a tener que poner a estudiar y repasar SQL porque estoy por demás oxidado. Es casi un año sin tocar algo siquiera de programación. Mucho tiempo perdido.  :(

Saludos,


Y si pudieras olvidarte de Access... mejor !  :D :D :D :p :p :p

Saludox ! :)


Y de ZEOS, joderrrrrr, que tengo un mega pedo por culpa de esos putos componentes  (li) :@ 8o|

Estoy a punto de quitarlos de una vez  :dmad:

Saludos
  • 0

#26 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 03 September 2014 - 05:04 PM



....

Gracias Wilson. Me voy a tener que poner a estudiar y repasar SQL porque estoy por demás oxidado. Es casi un año sin tocar algo siquiera de programación. Mucho tiempo perdido.  :(

Saludos,


Y si pudieras olvidarte de Access... mejor !  :D :D :D :p :p :p

Saludox ! :)


Y de ZEOS, joderrrrrr, que tengo un mega pedo por culpa de esos putos componentes  (li) :@ 8o|

Estoy a punto de quitarlos de una vez  :dmad:

Saludos


Como dice Nike: JUST DO IT !!!  (y)

Saludox ! :)
  • 0

#27 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 637 posts
  • LocationCiudad de México

Posted 04 September 2014 - 01:21 PM


Y de ZEOS, joderrrrrr, que tengo un mega pedo por culpa de esos putos componentes  (li) :@ 8o|

Estoy a punto de quitarlos de una vez  :dmad:

Saludos



www.devart.com

Saludos e-go!!!
  • 0

#28 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 08 September 2014 - 09:39 AM

Y de ZEOS, joderrrrrr, que tengo un mega pedo por culpa de esos putos componentes  (li) :@ 8o|

Estoy a punto de quitarlos de una vez  :dmad:

Saludos

Yo a esos componentes hasta la fecha no tuve que tocarlos.  :D No escupo tanto para arriba porque ahora que en esta semana, ¡por fin!, me voy a comprar la PC e instale Linux, Lazarus y Firebird no se si usaré los componentes por defecto que tiene o deberé armarme de valor y emplear Zeos.

Ahora, volviendo al hilo... me pregunto si lo des-resuelto o inicio otro  8o| ... Ahora resulta que necesito una consulta con un giro de 160°: Debo obtener aquellos expedientes que no tienen ningún movimientos, o bien (y/o), que no hayan tenido movimientos desde cierta fecha dada por parámetro.  8o|

Como dice la frase, Oh, y ahora quien podrá ayudarme... ¿Wilson el chapulin SQLizado?  :D

Saludos,
  • 0

#29 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 08 September 2014 - 01:02 PM


Debo obtener aquellos expedientes que no tienen ningún movimientos.


Así a ojo porque no tengo access a mano, sería:



SELECT TablaExptes.ExpteCod, TablaExptes.ExpteNro, TablaExptes.Descripción, TablaEstadosExpte.Nombre, TablaMovimientosExptes.FechaRevision
FROM TablaEstadosExpte INNER JOIN (TablaExptes INNER JOIN TablaMovimientosExptes ON TablaExptes.[IdExpte] = TablaMovimientosExptes.[ExpteID]) ON TablaEstadosExpte.[IDEstado] = TablaMovimientosExptes.[EstadoID]

WHERE TablaExptes.[IdExpte] NOT IN(SELECT TablaMovimientosExptes.[ExpteID] FROM TablaMovimientosExptes;);



o bien (y/o), que no hayan tenido movimientos desde cierta fecha dada por parámetro.




SELECT TablaExptes.ExpteCod, TablaExptes.ExpteNro, TablaExptes.Descripción, TablaEstadosExpte.Nombre, TablaMovimientosExptes.FechaRevision
FROM TablaEstadosExpte INNER JOIN (TablaExptes INNER JOIN TablaMovimientosExptes ON TablaExptes.[IdExpte] = TablaMovimientosExptes.[ExpteID]) ON TablaEstadosExpte.[IDEstado] = TablaMovimientosExptes.[EstadoID]

WHERE TablaExptes.[IdExpte] NOT IN(SELECT TablaMovimientosExptes.[ExpteID] FROM TablaMovimientosExptes WHERE TablaMovimientosExptes.FechaRevision >= [PARAMETRO];);


Saludos.
  • 0

#30 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 08 September 2014 - 01:42 PM

Gracias Wilson,  :)
te agradezco la enorme ayuda que me has dado. En cuanto tenga tiempo de poner a prueba la consulta lo veo. Estuve pensando en como encararla mientras hacía mis trámites del día, y en lo primero que me dije es emplear el NOT IN SELECT tal como en tu ejemplo.

Saludos,
  • 0

#31 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 08 September 2014 - 03:01 PM

Gracias Wilson,  :)
te agradezco la enorme ayuda que me has dado. En cuanto tenga tiempo de poner a prueba la consulta lo veo. Estuve pensando en como encararla mientras hacía mis trámites del día, y en lo primero que me dije es emplear el NOT IN SELECT tal como en tu ejemplo.

Saludos,

Ya con access a la mano veo que hay que hacer pequeños cambios, hay que hacer uso de DISTINCT y prescindir de los campos que generen expedientes repetidos.


SELECT DISTINCT TablaExptes.[IdExpte], TablaExptes.ExpteCod, TablaExptes.ExpteNro, TablaExptes.Descripción
FROM TablaExptes  INNER JOIN TablaMovimientosExptes ON TablaExptes.[IdExpte] = TablaMovimientosExptes.[ExpteID]

WHERE TablaExptes.[IdExpte] NOT IN(SELECT TablaMovimientosExptes.[ExpteID] FROM TablaMovimientosExptes;);


La segunda se puede hacer incluso un poco más eficiente así:


SELECT DISTINCT TablaExptes.[IdExpte], TablaExptes.ExpteCod, TablaExptes.ExpteNro, TablaExptes.Descripción
FROM TablaExptes  INNER JOIN TablaMovimientosExptes ON TablaExptes.[IdExpte] = TablaMovimientosExptes.[ExpteID]
WHERE  ((Not (TablaMovimientosExptes.FechaRevision)>=[PARAMETRO]));


Si necesitas que en estas consultas aparezcan el último estado y la última fecha de revisión, no hay mas remedio que denormalizar un poco la tabla de expedientes y agregar estos dos campos, e implementar el mecanismo para actualizarlos en función de los cambios en la tabla de movimientos.

Saludos.

  • 0




IP.Board spam blocked by CleanTalk.