sql >> Databasteknik >  >> RDS >> Sqlserver

SQL 2008 frågeproblem - vilka LatLongs finns i en geografipolygon?

När det gäller dina "redigeringar" är det inte ofta du ser en fråga som innehåller "vänligen ange inte...". Visst hjälper varje liten bit? Särskilt eftersom du faktiskt inte har visat oss vad du gör känna till STContains eller STIntersects (eller Filter() för den delen)...

Hur som helst, jag hade en databas med postnummer och butiksplatser till hands, så jag döpte om tabellerna/kolumnerna för att matcha dina (jag har då 6 535 CrimeLocatoins och 3 285 GeoShapes). Jag antar att du har listat ut det nu - men någon annan kanske tycker att det här är användbart...

Följande fråga returnerar antalet CrimeLocations i varje 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

Det tar åldrar (som 20 minuter) eftersom jag inte har ställt in några geospatiala index och mina ShapeFiles har ett högt antal poäng, men det körs framgångsrikt. Om jag vill begränsa resultaten som du föreslår:

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

Naturligtvis vill du inte hårdkoda numret 500 - så du kan lägga till en COUNT(*) FROM CrimeLocations underfråga där, eller en variabel med summan från en separat fråga.

Är det tillräckligt komplicerat?




  1. Hur laddar man en XML-fil till en databas med ett SSIS-paket?

  2. FLOOR() Exempel i SQL Server

  3. Hur du säkerhetskopierar din Moodle MariaDB-databas

  4. Ubuntu 17:Kan inte installera mysqlclient