Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Select agrupado por ids más altos

Estas en el tema de Select agrupado por ids más altos en el foro de Mysql en Foros del Web. Hola a todos! Mi problema es el siguiente, quiero hacer como un select distinct de una vista en la que se repiten empresas con distintos ...
  #1 (permalink)  
Antiguo 28/08/2012, 07:21
 
Fecha de Ingreso: febrero-2011
Mensajes: 26
Antigüedad: 13 años, 10 meses
Puntos: 0
Pregunta Select agrupado por ids más altos

Hola a todos!

Mi problema es el siguiente, quiero hacer como un select distinct de una vista en la que se repiten empresas con distintos ids de contrato y fechas...

He probado varias maneras pero ninguna me está resultando 100% efectiva... la que más se acerca la he conseguido así:
Código PHP:
SELECT MAXidDocumentoContrato ) , idEmpresanombreComercial,  fechaInicioContratofechaFinContratoidTipoObjetoAnuncio....
FROM vresultados
GROUP BY idEmpresa 
Lo que me devuelve bien es que me lo agrupa por Empresa, lo que me quita repetidos; lo malo es que sí que me saca el MAX(idDocumentoContrato) pero no los datos que lleva asociados a él, es decir, que me puede sacar el MAX(idDocumentoContrato) = 5, pero el resto de campos(nombreComercial, fechas...) no se corresponden a ese id de contrato.

¿Se les ocurre alguna otra manera de realizar esta consulta? Muchas gracias desde ya :)

Saluditoss
  #2 (permalink)  
Antiguo 28/08/2012, 07:33
Avatar de altex  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 4
Respuesta: Select agrupado por ids más altos

Haz una subselect dentro del SELECT, no es muy elegante pero a mi me ha servido alguna vez. Creo que sería algo así:

Código MySQL:
Ver original
  1. SELECT vc.idEmpresa, vc.nombreComercial,  vc.fechaInicioContrato, vc.fechaFinContrato, vc.idTipoObjetoAnuncio, , ...., (SELECT MAX( idDocumentoContrato WHERE idDcoumentoContrato = vc.idDocumentoContrato)  FROM vresultados) AS idMaximo
  2. FROM vresultados vc
  3. GROUP BY vc.idEmpresa

Espero que te sirva :)

Última edición por altex; 28/08/2012 a las 07:41
  #3 (permalink)  
Antiguo 28/08/2012, 08:49
Avatar de antoniopol  
Fecha de Ingreso: agosto-2012
Ubicación: Valladolid
Mensajes: 114
Antigüedad: 12 años, 3 meses
Puntos: 21
Respuesta: Select agrupado por ids más altos

lo siento pero no se que quieres sacar que a mi no me queda claro, por que el uso de group by basicamente es para hacer resumenes como sacar los máximos, la suma, un computo,... si al final vas a querer sacar todos los contratos creo que una select normal bastaría.
__________________
>> Blog de desarrollo web.
>> @antoniopol06 amante de la Web =D
  #4 (permalink)  
Antiguo 28/08/2012, 08:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 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.
  #5 (permalink)  
Antiguo 29/08/2012, 06:09
 
Fecha de Ingreso: febrero-2011
Mensajes: 26
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Select agrupado por ids más altos

Hola Leo,

Muchas gracias por la explicación tan detallada :D. Es eso justo lo que pretendo, no solo sacar el máximo idDocumentoContrato sino también la información asociada a él.

Utilizando de esa forma el INNER JOIN sí que veo que me puede servir, lo probaré y comento que tal.

Un saludo!
  #6 (permalink)  
Antiguo 31/08/2012, 06:05
 
Fecha de Ingreso: febrero-2011
Mensajes: 26
Antigüedad: 13 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Select agrupado por ids más altos

Buenos días de nuevo,

Muy bien!! Tuve que hacer algunos ajustes previos en la tabla y en la consulta pero me ha servido haciéndolo así.
Muchas gracias de nuevo, resuelto el problema :)

Etiquetas: max, select, jquery-mobile
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:57.