sql >> Database teknologi >  >> RDS >> Sqlserver

SQL 2008-forespørgselsproblem - hvilke LatLong'er findes i en geografipolygon?

Med hensyn til dine 'redigeringer' er det ikke ofte, du ser et spørgsmål, der inkluderer "giv venligst ikke...". Sikkert hver lille smule hjælper? Især fordi du faktisk ikke har vist os, hvad du gør kender til STContains eller STIntersects (eller Filter() for den sags skyld)...

I hvert fald havde jeg en database med postnumre og butiksplaceringer ved hånden, så jeg omdøbte tabellerne/kolonnerne til at matche dine (jeg har så 6.535 CrimeLocatoins og 3.285 GeoShapes). Jeg formoder, at du har fundet ud af det nu - men en anden vil måske finde dette nyttigt...

Følgende forespørgsel returnerer antallet af CrimeLocations i hver 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 tager aldre (som 20 minutter), fordi jeg ikke har opsat nogen geospatiale indekser, og mine ShapeFiles har et højt antal point, men det kører med succes. Hvis jeg ville begrænse resultaterne, som du foreslå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

Selvfølgelig ønsker du ikke at hardkode tallet 500 - så du kan tilføje en COUNT(*) FROM CrimeLocations underforespørgsel der, eller en variabel med totalen fra en separat forespørgsel.

Er det komplekst nok?




  1. Serialiseringsfejl:Deadlock fundet under forsøg på at få lås

  2. Gå i dvale ved at forbinde to tabeller og hente alle poster?

  3. ORA-01036:ulovligt variabelnavn/nummer under opkald af lagret funktion

  4. Beregn percentil i MySQL baseret på totaler