sql >> Database >  >> RDS >> Sqlserver

Sql 2008-queryprobleem - welke LatLong's bestaat in een geografische polygoon?

Met betrekking tot uw 'bewerkingen' ziet u niet vaak een vraag met de tekst 'geef alstublieft niet op...'. Alle kleine beetjes helpen toch? Vooral omdat je ons niet echt hebt laten zien wat je doet weten over STContains of STIntersects (of Filter() wat dat betreft)...

Hoe dan ook, ik had een database met postcodes en winkellocaties bij de hand, dus hernoemde ik de tabellen/kolommen zodat ze overeenkomen met die van jou (ik heb dan 6.535 CrimeLocatoins en 3.285 GeoShapes). Ik neem aan dat je het inmiddels doorhebt - maar iemand anders kan dit nuttig vinden...

De volgende query retourneert het aantal CrimeLocations in elk 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

Het duurt eeuwen (zoals 20 minuten) omdat ik geen geospatiale indexen heb ingesteld en mijn ShapeFiles een hoog aantal punten hebben, maar het werkt wel met succes. Als ik de resultaten wilde beperken zoals u voorstelt:

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

Natuurlijk wil je het getal 500 niet hardcoderen - dus je zou een COUNT(*) FROM CrimeLocations kunnen toevoegen subquery daar, of een variabele met het totaal van een aparte query.

Is dat complex genoeg?




  1. Zoek leeftijdscategorie in mysql, php

  2. Hoe we in VB.net string kunnen coderen voor SQL

  3. Mysql:waarden tussen twee kolommen selecteren

  4. Schemamigratie:Relationeel naar Star