Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Problema de consulta Sql 2008 - qual LatLong existe em um polígono geográfico?


Em relação às suas 'edições', não é comum você ver uma pergunta que inclua "por favor, não forneça...". Certamente cada pouco ajuda? Principalmente porque você não nos mostrou o que faz conheça STContains ou STIntersects (ou Filter() aliás)...

De qualquer forma, eu tinha um banco de dados de CEPs e localizações de armazenamento à mão, então renomeei as tabelas/colunas para corresponder às suas (eu tenho 6.535 CrimeLocatoins e 3.285 GeoShapes). Eu presumo que você tenha descoberto agora - mas alguém pode achar isso útil ...

A consulta a seguir retorna o número de CrimeLocations em 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

Leva eras (como 20 minutos) porque não configurei nenhum índice geoespacial e meus ShapeFiles têm uma contagem de pontos alta, mas é executado com sucesso. Se eu quisesse restringir os resultados como você sugere:
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

Claro que você não quer codificar o número 500 - então você pode adicionar um COUNT(*) FROM CrimeLocations subconsulta lá, ou uma variável com o total de uma consulta separada.

Isso é complexo o suficiente?