Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/06/2015, 18:09
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Seleccionar última repetición de registros de una tabla

Hola, amigos.

Tengo un problema intentando seleccionar los valores de una tabla en la cual hay un campo con N valores (distribuidos en N registros) que —por ende— pueden repetirse N veces. Lo que pretendo es seleccionar los registros que coincidan con la última vez que aparece cada uno de los valores repetidos en el campo en cuestión.

En realidad, esto terminará involucrando a dos tablas, por lo que empecé por una de ellas para ver cómo podría hacerlo. Paso a mostrar la conformación de ambas.

Código Tablas:
Ver original
  1. OBRAS               AVANCES
  2. id  nomb            id  id_ob   desc
  3.  1  ob-1             1    1     desc nro. 1 de ob-1
  4.  2  ob-2             2    3     desc nro. 1 de ob-3
  5.  3  ob-3             3    1     desc nro. 2 de ob-1
  6.  4  ob-4             4    2     desc nro. 1 de ob-2
  7.  5  ob-5             5    4     desc nro. 1 de ob-4
  8.                      6    2     desc nro. 2 de ob-2
  9.                      7    5     desc nro. 1 de ob-5
  10.                      8    1     desc nro. 3 de ob-1
  11.                      9    4     desc nro. 2 de ob-4
  12.                     10    5     desc nro. 2 de ob-5
  13.                     11    1     desc nro. 4 de ob-1
  14.                     12    3     desc nro. 2 de ob-3

Esas son las dos tablas que tengo. En realidad, hay más campos, pero por ahora solo muestro estos para no hacer más extensa la consulta.

El objetivo es tomar los registros de la tabla 'Obras' cuyos avances (registros de la tabla 'Avances') representen la última vez en que fueron guardados. En otras palabras, debería de obtener esto:

Código Objetivo:
Ver original
  1. id  nomb    desc
  2. 1   ob-1    desc nro. 4  <-- ID 11 en la tabla 'Avances'
  3. 2   ob-2    desc nro. 2  <-- ID 6 en la tabla 'Avances'
  4. 3   ob-3    desc nro. 2  <-- ID 12 en la tabla 'Avances'
  5. 4   ob-4    desc nro. 2  <-- ID 9 en la tabla 'Avances'
  6. 5   ob-5    desc nro. 2  <-- ID 10 en la tabla 'Avances'

Antes de hacer un JOIN, intenté tomar los registros finales de cada obra pero solo consultando en la tabla 'Avances', para lo cual hice esto:

Código MySQL:
Ver original
  1. SELECT DISTINCT id_ob FROM avances ORDER BY id DESC

Y, en efecto, obtuve los registros 3, 1, 5, 4 y 2, respectivamente. Justo en el orden en el que finalmente terminan ubicándose en la tabla 'Avances' (lo que correspondería a los id: 12, 11, 10, 9 y 6).

Luego, al intentar hacer la consulta con ambas tablas, es que se me presenta la complicación. Intenté usar un GROUP BY en la campo id_ob de la tabla avances, pero solo se agrupan los registros que aparecen por primera vez para cada obra y no los últimos.

Si alguien pudiera sugerirme otra forma de hacerlo para obtener los resultados que busco, se lo agradeceré mucho.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand