Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/08/2012, 08:57
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Select agrupado por ids más altos

Hola lauri_lunae:

Este tipo de consultas la hemos tratado muchas veces en el foro, y definitivamente, no creo que la propuesta altex te sirva de mucho, tendrías el mismo problema, seleccionarías el último idDocumento, pero no la información asociada a este... en realidad existen muchas maneras de hacerlo, pero una de las que más recomendamos es con el uso de JOIN's y subconsultas... checa este script. Supongamos que tienes esta tabla.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +---------------------+-----------+-----------------+---------------------+
  3. | idDocumentoContrato | idEmpresa | nombreComercial | fechaInicioContrato |
  4. +---------------------+-----------+-----------------+---------------------+
  5. |                   1 |         1 | nombre 1.1      | 2012-08-13          |
  6. |                   2 |         1 | nombre 1.2      | 2012-08-26          |
  7. |                   3 |         1 | nombre 1.3      | 2012-08-28          |
  8. |                   4 |         1 | nombre 1.4      | 2012-08-28          |
  9. |                   1 |         2 | nombre 2.1      | 2012-08-10          |
  10. |                   2 |         2 | nombre 2.2      | 2012-08-14          |
  11. |                   3 |         2 | nombre 2.3      | 2012-08-27          |
  12. +---------------------+-----------+-----------------+---------------------+
  13. 7 rows in set (0.01 sec)

Para obtener el último idDocumento para cada empresa, la consulta sería más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT idEmpresa, MAX(idDocumentoContrato)
  2.     -> FROM tabla GROUP BY idEmpresa;
  3. +-----------+--------------------------+
  4. | idEmpresa | MAX(idDocumentoContrato) |
  5. +-----------+--------------------------+
  6. |         1 |                        4 |
  7. |         2 |                        3 |
  8. +-----------+--------------------------+
  9. 2 rows in set (0.00 sec)

Pero lo que creo que necesitas no solo el idDocumento, sino la información asociada a ese id... sin embargo puedes utilizar la consulta de arriba para filtrar la información que necesitas, sería más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT T1.* FROM tabla T1
  2.     -> INNER JOIN
  3.     -> ( SELECT idEmpresa, MAX(idDocumentoContrato) max_idDocumentoContrato
  4.     ->   FROM tabla GROUP BY idEmpresa) T2
  5.     -> ON T1.idDocumentoContrato = T2.max_idDocumentoContrato
  6.     -> AND T1.idEmpresa = T2.idEmpresa;
  7. +---------------------+-----------+-----------------+---------------------+
  8. | idDocumentoContrato | idEmpresa | nombreComercial | fechaInicioContrato |
  9. +---------------------+-----------+-----------------+---------------------+
  10. |                   4 |         1 | nombre 1.4      | 2012-08-28          |
  11. |                   3 |         2 | nombre 2.3      | 2012-08-27          |
  12. +---------------------+-----------+-----------------+---------------------+
  13. 2 rows in set (0.00 sec)

Observa que la consulta marcada como T2 es en realidad la primer consulta que puse... al hacer el JOIN la utilizas para filtrar la información que realmente necesitas.

Saludos
Leo.