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+---------+-------+-------+---------+-------+
| CLIENTE | TIPO | IDREG | FECHA | VALOR |
+---------+-------+-------+---------+-------+
| 001A | Tipo1 | 100AB | 10-2009 | 100 |
| 001A | Tipo1 | 100AB | 10-2009 | 100 |
| 001B | Tipo2 | 100AC | 10-2009 | 100 |
| 001B | Tipo1 | 100AD | 10-2009 | 100 |
| 001B | Tipo2 | 100AC | 10-2009 | 100 |
| 001B | Tipo1 | 100AF | 10-2009 | 200 |
| 001B | Tipo2 | 100AE | 10-2009 | 100 |
+---------+-------+-------+---------+-------+
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 -> cliente
, idreg
, SUM(valor
) suma
-> WHERE tipo
= 'Tipo1' AND fecha
= '10-2009' +---------+-------+------+
| cliente | idreg | suma |
+---------+-------+------+
| 001A | 100AB | 200 |
| 001B | 100AD | 100 |
| 001B | 100AF | 200 |
+---------+-------+------+
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 -> cliente
, idreg
, SUM(valor
) suma
-> WHERE tipo
= 'Tipo1' AND fecha
= '10-2009' +---------+----------+
| cliente | max_suma |
+---------+----------+
| 001A | 200 |
| 001B | 200 |
+---------+----------+
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 -> cliente
, idreg
, SUM(valor
) suma
-> WHERE tipo
= 'Tipo1' AND fecha
= '10-2009' -> cliente
, idreg
, SUM(valor
) suma
-> WHERE tipo
= 'Tipo1' AND fecha
= '10-2009' -> ) T3
ON T1.cliente
= T3.cliente
AND T1.suma
= T3.max_suma
; +---------+-------+------+
| cliente | idreg | suma |
+---------+-------+------+
| 001A | 100AB | 200 |
| 001B | 100AF | 200 |
+---------+-------+------+
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.