SQL Server - Problema con GROUP BY

 
Vista:

Problema con GROUP BY

Publicado por Fernando (14 intervenciones) el 03/07/2007 13:51:30
Hola, tengo el siguiente SP

CREATE PROC ListadoImpuestosActuales as
BEGIN
SELECT ID_Impuesto, Impuesto, MAX(FECHA)
FROM Impuestos
GROUP BY Impuesto
END
GO

Lo que quero hacer es listar los impuestos que tienen la ultima fecha, osea el impuesto actual.
El problema que se me presenta es que en el SELECT quiero mostrar el ID_Impuesto, pero no me deja porque no lo incluyo en el GROUP BY. Y no lo puedo incluir porque sino como cada ID_Impuesto es distinto, me mostraria todos los registros de la tabla.
Como puedo solucionar esto?
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

Publicado por Carlos Reyes (49 intervenciones) el 03/07/2007 14:54:02
Por que no en lugar de utilizar el group by utilizas una clausula where para asi filtrar los resultados por la fecha que quieres:

CREATE PROC ListadoImpuestosActuales as
BEGIN
SELECT ID_Impuesto, Impuesto, FECHA
FROM Impuestos
WHERE FECHA = (SELECT MAX(ID_Impuesto) FROM Impuestos )
END
GO

de esta forma no necesitas agrupar los resulados y te regresara todos los resultados que coincidan con la fecha especificada en el subselect.

Saludos.
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

Publicado por Fernando (14 intervenciones) el 03/07/2007 15:16:01
No, porque de esa forma me esta seleccionando la fecha del ultimo ID_Impuesto.
Y puedo por ejemplo para que lo vean mas claro, tener estos registros.

ID_Impuesto Impuesto Valor Fecha
1 IVA 23 1/4/2005
2 Coffis 5 6/8/2006
3 IVA 18 3/3/2007

Con lo que decis tu me listaria solo el impuesto con ID_Impuesto =3
En este caso el impuesto ID_Impuesto =1 y ID_Impuesto =3 son iguales, solo que han variado su valor en el correr del tiempo.
Yo lo que necesito puntualmente es que el Stored Procedure me devuelva el impuesto ID_Impuesto=2 y el ID_Impuesto=3
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

Publicado por Carlos Reyes (49 intervenciones) el 03/07/2007 16:15:33
Ya entendi que quieres. Deseas que te de el ultimo elemento insertado, agrupado por Id y de acuerdo a la ultima fecha insertada para cada ID

Por cierto, disculpa, el filtro deberia aplicar de la siguiente manera:

CREATE PROC ListadoImpuestosActuales as
BEGIN
SELECT ID_Impuesto, Impuesto, FECHA
FROM Impuestos
WHERE FECHA = (SELECT MAX(ID_FECHA ) FROM Impuestos )
END
GO

y de acuerdo a lo que quieres hacer, debes utilizar un SELF JOIN en tu tabla, quedaria asi:

SELECT T1.ID_Impuesto, MAX(T1.ID_FECHA)
FROM Impuestos T1
INNER JOIN Impuestos T2
ON T1.ID_FECHA = T2.ID_FECHA
group BY T1.ID_Impuesto

Lo que haces aqui es especificarle que unicamente obtenga los registros cuya fecha sea la maxima encontrada pero agrupados por el identificador de tu impuesto; checalo y me avisas, asi lo hice algunavez en algun query y funciona perfectamente

Saludos
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

Publicado por Isaias (3308 intervenciones) el 03/07/2007 19:25:39
Deberia funcionar:

CREATE PROC ListadoImpuestosActuales as
BEGIN
SET NOCOUNT ON
IF NOT EXISTS(SELECT X.ID_Impuesto FROM Impuestos JOIN
(SELECT ID_Impuesto, MAX(FECHA) AS FECHA FROM Impuestos GROUP BY ID_Impuesto) AS X)
BEGIN
SELECT 'No se encontraron registros en la lista de impuestos'
RETURN(0)
END

SELECT X.ID_Impuesto, Impuesto, X.FECHA FROM Impuestos JOIN
(SELECT ID_Impuesto, MAX(FECHA) AS FECHA FROM Impuestos GROUP BY ID_Impuesto) AS X

END
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