sql >> Base de Datos >  >> RDS >> Sqlserver

Problema de consulta Sql 2008:¿qué LatLong existe en un polígono geográfico?

Con respecto a sus 'ediciones', no es frecuente que vea una pregunta que incluya "por favor, no proporcione...". ¿Seguro que todo ayuda? Particularmente porque en realidad no nos has mostrado lo que haces saber sobre STContains o STIntersects (o Filter() para el caso)...

De todos modos, tenía a mano una base de datos de códigos postales y ubicaciones de tiendas, así que cambié el nombre de las tablas/columnas para que coincidieran con las suyas (entonces tengo 6535 CrimeLocatoins y 3285 GeoShapes). Supongo que ya lo habrás descubierto, pero alguien más podría encontrarlo útil...

La siguiente consulta devuelve el número de CrimeLocations en cada GeoShapes.ShapeFile

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
ORDER BY 2 DESC

Lleva años (como 20 minutos) porque no he configurado ningún índice geoespacial y mis ShapeFiles tienen un alto número de puntos, pero se ejecuta correctamente. Si quisiera restringir los resultados como sugieres:

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
HAVING COUNT(CL.Id) = 500

Por supuesto, no desea codificar el número 500, por lo que podría agregar un COUNT(*) FROM CrimeLocations subconsulta allí, o una variable con el total de una consulta separada.

¿Es lo suficientemente complejo?