SQL - Problema con group by y recuperacion de campos

 
Vista:

Problema con group by y recuperacion de campos

Publicado por Pablo (10 intervenciones) el 24/10/2006 06:00:24
Hola por favor espero que me puedan ayudar:

Tengo una tabla Aportes con los siguientes campos: CodA | Nombre | Monto | Perido
y un Store Procedure que me recupera el periodo maximo de cada Aporte registrado en esta tabla (agrupo la consulta por CodA), bueno esto lo consigo con esta instruccion "select max(Periodo), CodA, Nombre from Aporte where group by CodA, Nombre", hasta ahi no tengo problema pero lo que quiero es que recupere tambien el monto del Aporte sin tenerlo que incluir en la clausula group by xq es ahi donde se me malogra la consulta.

Si esto fuera posible en el sql esto es lo que quisiera hacer:
"select max(Periodo), CodA, Nombre, Monto from Aporte where group by CodA"
osea solo quiero agrupar por CodA para que me calcule el maximo periodo de cada aporte pero que me pinte todos los campos de cada aporte recuperado.

Gracias por leer mi msj, se los agradeceria mucho si me dijeran alguna forma de poder conseguir esto, de antemano agradesco su interes.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con group by y recuperacion de campos

Publicado por Tom (25 intervenciones) el 24/10/2006 19:37:46
No puedes, SQL no lo permite.
Puedes intentar algo como esto:

select a.periodo, a.CodA, a.Nombre, a.Monto
from Aporte a
where a.periodo = (select MAX(Periodo) from Aporte where CodA = a.CodA)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con group by y recuperacion de campos

Publicado por Isaías (5072 intervenciones) el 25/10/2006 18:58:37
Con el permiso de Tom.

Claro que se puede, en un problema del manejo de CONJUNTOS (Matematicas puras, aplicadas a la computacion), luego entonces tenemos 2 conjuntos, uno donde sacas el Maximo Periodo agrupado por CodA y otro donde Tienes el Monto de ese CodA, entonces es un JOIN de ambos conjuntos

SELECT CodA, Nombre, MAX(Peridod), X.Monto FROM APORTE
JOIN
(SELECT CodA, Monto FROM APORTE) as X
ON APORTE.CodA = X.CodA
GROUP BY CodA, Nombre, X.Monto

Nota: Como no tengo donde probar, fijate si requieres en el group by la columna X.Monto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con group by y recuperacion de campos

Publicado por Pablo (10 intervenciones) el 26/10/2006 03:00:00
Muchisimas gracias Tom la instruccion que me diste me reolvio el problema.

Gracias a ti tambien isaías probe tu solucion pero me dio algunos errores, lo trate de arreglar pero si quitaba x.monto de group by volvia al mismo problema no me mostraba el monto. Seria bueno si pudieras revisarla xq tu solucion me parecio interesante espero tu respuesta gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con group by y recuperacion de campos

Publicado por Isaías (5072 intervenciones) el 26/10/2006 18:41:51
No quites x.Monto del GROUP BY.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con group by y recuperacion de campos

Publicado por Tom (25 intervenciones) el 26/10/2006 09:02:22
Mira, las matemáticas son muy bonitas, pero SQL es un standard (o trata de serlo) con ciertas restricciones. Una de ellas es que __no__ puedes mezclar expresiones "nonaggregate" (fila a fila) con "aggregate" (conjuntos de filas) en una sentencia select.
La única excepción a esta regla es que se pueden mezclar utilizando agrupamiento (group by) pero a condición de que cada expresión "nonaggregate" de la sentencia select __debe__ aparecer en el agrupamiento.

Todo esto está mejor explicado en inglés, pero no tengo mucho nivel para traducirlo mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar