Что касается ваших «правок», то не часто вы видите вопрос с надписью «пожалуйста, не предоставляйте ...». Конечно, каждый немного помогает? Тем более, что вы на самом деле не показали нам, что вы делаете знаете о STContains
или STIntersects
(или Filter()
в этом отношении) ...
В любом случае, у меня была удобная база данных почтовых индексов и мест хранения, поэтому я переименовал таблицы / столбцы, чтобы они соответствовали вашим (у меня тогда было 6 535 CrimeLocatoins и 3 285 GeoShapes). Я предполагаю, что вы уже поняли это - но кто-то еще может найти это полезным ...
Следующий запрос возвращает количество CrimeLocations в каждом 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
Требуется возраст (например, 20 минут), потому что я не настроил никаких геопространственных индексов, и мои ShapeFiles имеют высокий счетчик точек, но он работает успешно. Если бы я хотел ограничить результаты, как вы предлагаете:
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
Конечно, вы не хотите жестко кодировать число 500 - так что вы можете добавить туда подзапрос COUNT(*) FROM CrimeLocations
или переменную с итогом из отдельного запроса.
Это достаточно сложно?