Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/08/2013, 10:47
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Máximo de sumas

Hola Wolfchamane:

A ver, por un lado hablas de unas estructura de datos y en tu consulta manejas nombres de columnas y tablas distintos... ojo con eso, si vas a poner datos de ejemplo, pues basa tus consultas en esos datos... por ejemplo, tus campos mes_datos, saldo, titularidad_tipo o nuc, NO EXISTEN EN TUS DATOS DE EJEMPLO, o tu campo fecha NO ES DE TIPO DATE, por lo tanto no podemos decirte donde está el problema...

para el script, me voy a basas estrictamente en tus datos que pones de ejemplo, es decir:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +---------+-------+-------+---------+-------+
  3. | CLIENTE | TIPO  | IDREG | FECHA   | VALOR |
  4. +---------+-------+-------+---------+-------+
  5. | 001A    | Tipo1 | 100AB | 10-2009 |   100 |
  6. | 001A    | Tipo1 | 100AB | 10-2009 |   100 |
  7. | 001B    | Tipo2 | 100AC | 10-2009 |   100 |
  8. | 001B    | Tipo1 | 100AD | 10-2009 |   100 |
  9. | 001B    | Tipo2 | 100AC | 10-2009 |   100 |
  10. | 001B    | Tipo1 | 100AF | 10-2009 |   200 |
  11. | 001B    | Tipo2 | 100AE | 10-2009 |   100 |
  12. +---------+-------+-------+---------+-------+
  13. 7 rows in set (0.01 sec)

Ahora bien, para obtener el primer resultado que colocas, es decir, la sumatoria agrupando por cliente para el Tipo = Tipo1 y la fecha = 10-2009, haces lo siguiente:

CONSULTA 1
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   cliente, idreg, SUM(valor) suma
  3.     -> FROM tabla
  4.     -> WHERE tipo = 'Tipo1' AND fecha = '10-2009'
  5.     -> GROUP BY idreg;
  6. +---------+-------+------+
  7. | cliente | idreg | suma |
  8. +---------+-------+------+
  9. | 001A    | 100AB |  200 |
  10. | 001B    | 100AD |  100 |
  11. | 001B    | 100AF |  200 |
  12. +---------+-------+------+
  13. 3 rows in set (0.00 sec)

Ahora bien, lo si entendí correctamente, lo que quieres obtener es el MAX(suma) para cada cliente, con su respectivo idreg correcto??? esto lo puedes obtener de muchas formas, la más "simple" es con JOIN's por un lado, obtienes el valor máximo para cada cliente:

CONSULTA 2
Código MySQL:
Ver original
  1. mysql> SELECT cliente, MAX(suma) max_suma FROM
  2.     ->     ( SELECT
  3.     ->         cliente, idreg, SUM(valor) suma
  4.     ->       FROM tabla
  5.     ->       WHERE tipo = 'Tipo1' AND fecha = '10-2009'
  6.     ->       GROUP BY idreg
  7.     ->     ) T2 GROUP BY T2.cliente;
  8. +---------+----------+
  9. | cliente | max_suma |
  10. +---------+----------+
  11. | 001A    |      200 |
  12. | 001B    |      200 |
  13. +---------+----------+
  14. 2 rows in set (0.01 sec)

Si observas, a esta última consulta, lo único que le falta es el idReg... puedes utilizar esta última consulta para filtrar la información de la consulta anterior, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT T1.* FROM
  2.     ->   ( SELECT
  3.     ->       cliente, idreg, SUM(valor) suma
  4.     ->     FROM tabla
  5.     ->     WHERE tipo = 'Tipo1' AND fecha = '10-2009'
  6.     ->     GROUP BY idreg) T1
  7.     ->   INNER JOIN
  8.     ->   ( SELECT cliente, MAX(suma) max_suma FROM
  9.     ->     ( SELECT
  10.     ->         cliente, idreg, SUM(valor) suma
  11.     ->       FROM tabla
  12.     ->       WHERE tipo = 'Tipo1' AND fecha = '10-2009'
  13.     ->       GROUP BY idreg
  14.     ->     ) T2 GROUP BY T2.cliente
  15.     ->   ) T3 ON T1.cliente = T3.cliente AND T1.suma = T3.max_suma;
  16. +---------+-------+------+
  17. | cliente | idreg | suma |
  18. +---------+-------+------+
  19. | 001A    | 100AB |  200 |
  20. | 001B    | 100AF |  200 |
  21. +---------+-------+------+
  22. 2 rows in set (0.01 sec)

Si observas, T1 en realidad es la consulta 1, y T3 es en realidad toda la consulta 2... hay otras maneras de obtener este resultado, es cuestión de que investigues un poco más.

Haz la prueba con tus tablas reales y tus datos, si tienes problemas postea las estructuras y nombres reales y algunos datos de ejemplo, no importa que sean ficticios

Saludos
Leo.