Về 'các chỉnh sửa' của bạn, bạn không mấy khi thấy câu hỏi bao gồm "vui lòng không cung cấp ...". Chắc chắn từng chút một giúp đỡ? Đặc biệt là vì bạn chưa thực sự cho chúng tôi thấy bạn làm gì biết về STContains
hoặc STIntersects
(hoặc Filter()
cho vấn đề đó) ...
Dù sao, tôi đã có một cơ sở dữ liệu gồm mã zip và vị trí lưu trữ có sẵn, vì vậy tôi đã đổi tên các bảng / cột để phù hợp với bảng của bạn (sau đó tôi có 6.535 CrimeLocatoins và 3.285 GeoShapes). Tôi đoán rằng bạn đã tìm ra nó ngay bây giờ - nhưng ai đó có thể thấy điều này hữu ích ...
Truy vấn sau trả về số lượng Vị trí tội phạm trong mỗi 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
Phải mất độ tuổi (như 20 phút) bởi vì tôi chưa thiết lập bất kỳ chỉ mục không gian địa lý nào và ShapeFiles của tôi có số điểm cao, nhưng nó chạy thành công. Nếu tôi muốn hạn chế kết quả như bạn đề xuất:
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
Tất nhiên bạn không muốn mã hóa cứng số 500 - vì vậy bạn có thể thêm COUNT(*) FROM CrimeLocations
truy vấn con ở đó hoặc một biến với tổng số từ một truy vấn riêng biệt.
Như vậy đã đủ phức tạp chưa?