INNER JOIN sobre una misma tabla Problema

A,B,C                 , D,              E
2,1,'2011-02-01','2011-01-01', 8
2,1,'2011-02-01','2011-01-02', 7
2,1,'2011-02-01','2011-01-04', 6
2,1,'2011-02-01','2011-01-04', 6
2,1,'2011-02-01','2011-01-04', 3
2,1,'2011-02-01','2011-01-04', 3
Tengo el problema con esta consulta:
SELECT a.A, a.B, a.C, a.D, a.E
FROM TABLE_A a          
INNER JOIN              
   (SELECT b.A, b.B, b.C, max(b.D) AS max_date
    FROM TABLE_A b    
    GROUP BY b.A, b.B, b.C
   ) AS b
ON  a.A = b.A
AND a.B = b.B
AND a.C = b.C
AND a.D = b.D
Esto me da como resultado:
2,1,'2011-02-01','2011-01-04', 6
2,1,'2011-02-01','2011-01-04', 6
2,1,'2011-02-01','2011-01-04', 3
2,1,'2011-02-01','2011-01-04', 3
La consulta trae bien los datos, pero necesito filtrarlo por un dato más... El de la columna E que no siempre es correcto en el sentido que el máximo de esa columna no siempre es correspondiente con la fecha que seria lo correcto..
O sea necesito de los resultados que me genera este query (ya filtrados por la fecha D) filtrarlo por el máximo de E.
Del ejemplo de la tabla del principio el resultado correcto seria:
2,1,'2011-02-01','2011-01-04', 6
2,1,'2011-02-01','2011-01-04', 6
Si agrego un max(E) as maxE en el INNER JOIN y luego filtro en ON con a.E = b.maxE pierdo resultados... Ya que necesito el maximo del resultado del join :(
Se me acabaron las ideas... ¿alguna ayuda?
Respuesta
1
Para filtrar datos necesitas usar la clausula WHERE o HAVING si esta dentro de un gruop by... en este caso yo usaría un where.
Habría que probar porque no se si de memoria saldrá, pero prueba esto...
SELECT a.A, a.B, a.C, a.D, a.E 
FROM TABLE_A a           
INNER JOIN               
   (SELECT b.A, b.B, b.C, max(b.D) AS max_date 
    FROM TABLE_A b   
    GROUP BY b.A, b.B, b.C 
   ) AS b 
ON  a.A = b.A 
AND a.B = b.B 
AND a.C = b.C 
AND a.D = b.D 
WHERE a.E = (SELECT max(x.E) FROM TABLE_A x)
Ese where podría ser que hubiera que ponerlo en otro sitio, pero prueba porque por ahí van las cosas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas