Jeśli chodzi o Twoje „edycje”, rzadko pojawia się pytanie zawierające „proszę nie podawać...”. Na pewno wszystko pomaga? Zwłaszcza, że tak naprawdę nie pokazałeś nam, co robisz wiedzieć o STContains
lub STIntersects
(lub Filter()
o to chodzi)...
W każdym razie miałem pod ręką bazę kodów pocztowych i lokalizacji sklepów, więc zmieniłem nazwy tabel/kolumn, aby pasowały do Twojej (wtedy mam 6535 CrimeLocatoin i 3285 GeoShapes). Przypuszczam, że już to zrozumiałeś - ale ktoś inny może uznać to za przydatne...
Następujące zapytanie zwraca liczbę miejsc przestępczości w każdym 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
To trwa wieki (np. 20 minut), ponieważ nie skonfigurowałem żadnych indeksów geoprzestrzennych, a moje pliki ShapeFiles mają dużą liczbę punktów, ale działają pomyślnie. Jeśli chcę ograniczyć wyniki, jak sugerujesz:
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
Oczywiście nie chcesz zakodować na stałe liczby 500 - więc możesz dodać COUNT(*) FROM CrimeLocations
tam podzapytanie lub zmienna z sumą z oddzielnego zapytania.
Czy to wystarczająco skomplikowane?