Consulta Problematica!

24/10/2003 - 20:48 por Juan | Informe spam
Hola gente!!!
Quiero hacer una consulta y no puedo dar con la sentencia correcta.

Yo tengo la siguiente tabla

PoligonoMayor - PolygonoMenor - SuperficieInterseccion
1 1 0,59
2 1 0,31
3 1 0,10
4 3 0,93
5 4 0,98
5 5 0,65

La idea es saber a que poligono mayor pertenece cada poligono menor. Y en el
caso en que un poligono menor se encuentre repartido en mas de un poligono
menor (como el caso de los tres primeros registros) y en ese caso quedarme
con el de mayor superficie de interseccion.

De la tabla que tengo arriba me tendria que quedar lo siguiente

PoligonoMayor - PolygonoMenor - SuperficieInterseccion
1 1 0,59
4 3 0,93
5 4 0,98
5 5 0,65

¿Es posible hacerlo en un solo Query?

Desde ya muchas gracias por todo.
Juan Rabadan
 

Leer las respuestas

#1 Javier Loria
26/10/2003 - 21:48 | Informe spam
Hola Juan:
Si no te importan los empates:
/* Poligonos con mayor Interseccion */
SELECT P1.PoligonoMayor,
P1.PoligonoMenor,
P1.SuperficieInterseccion
FROM Poligonos AS P1
JOIN
(
SELECT PoligonoMenor, MAX(SuperficieInterseccion) AS
SuperficieInterseccion
FROM Poligonos
GROUP BY PoligonoMenor
) AS P3 -- Mejor de P2, si no se hace la consulta muy hedionda
ON
P1.PoligonoMenor=P3.PoligonoMenor
AND P1.SuperficieInterseccion=P3.SuperficieInterseccion
/* Fin de Poligonos con mayor Interseccion */

Si quieres eliminar los empates, necesitas algun criterio, para
seleccionar el PoligonoMayor, talvez el MIN o el MAX?. En este caso la
consulta es:
/* Poligonos con mayor Interseccion, sin EMPATES*/
SELECT MAX(P1.PoligonoMayor) AS PoligonoMayor,
P1.PoligonoMenor,
P1.SuperficieInterseccion
FROM Poligonos AS P1
JOIN
(
SELECT PoligonoMenor, MAX(SuperficieInterseccion) AS
SuperficieInterseccion
FROM Poligonos
GROUP BY PoligonoMenor
) AS P3 -- Mejor de P2, si no se hace la consulta muy hedionda
ON
P1.PoligonoMenor=P3.PoligonoMenor
AND P1.SuperficieInterseccion=P3.SuperficieInterseccion
GROUP BY P1.PoligonoMenor, P1.SuperficieInterseccion

/* Fin de Poligonos con mayor Interseccion, sin EMPATES*/

Es mucho mas facil conseguir ayuda si pones el codigo de creacion de las
tablas y los inserts para poder hacer las pruebas. Por mi parte use:
/* Codigo de Creacion de la Tabla */
CREATE TABLE Poligonos(
PoligonoMayor INT NOT NULL,
PoligonoMenor INT NOT NULL,
SuperficieInterseccion NUMERIC(9,2) NOT NULL,
CONSTRAINT PK_Poligonos PRIMARY KEY (PoligonoMayor, PoligonoMenor)
)

INSERT Poligonos(PoligonoMayor, PoligonoMenor, SuperficieInterseccion)
SELECT 1, 1, 0.59 UNION ALL
SELECT 2, 1, 0.31 UNION ALL
SELECT 3, 1, 0.10 UNION ALL
SELECT 4, 3, 0.93 UNION ALL
SELECT 5, 4, 0.98 UNION ALL
SELECT 5, 5, 0.65

/* Fin de Codigo de Creacion la Tabla */

Saludos,



Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


Juan escribio:
Hola gente!!!
Quiero hacer una consulta y no puedo dar con la sentencia correcta.

Yo tengo la siguiente tabla

PoligonoMayor - PolygonoMenor - SuperficieInterseccion
1 1 0,59
2 1 0,31
3 1 0,10
4 3 0,93
5 4 0,98
5 5 0,65

La idea es saber a que poligono mayor pertenece cada poligono menor.
Y en el caso en que un poligono menor se encuentre repartido en mas
de un poligono menor (como el caso de los tres primeros registros) y
en ese caso quedarme con el de mayor superficie de interseccion.

De la tabla que tengo arriba me tendria que quedar lo siguiente

PoligonoMayor - PolygonoMenor - SuperficieInterseccion
1 1 0,59
4 3 0,93
5 4 0,98
5 5 0,65

¿Es posible hacerlo en un solo Query?

Desde ya muchas gracias por todo.
Juan Rabadan

Preguntas similares