Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Vấn đề truy vấn Sql 2008 - LatLong nào tồn tại trong một đa giác địa lý?

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?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu đơn hoặc nhiều cơ sở dữ liệu

  2. Làm cách nào để bạn xem TẤT CẢ văn bản từ ntext hoặc nvarchar (max) trong SSMS?

  3. Ví dụ về CTE và đệ quy của SQL Server

  4. Khôi phục cơ sở dữ liệu từ các tệp .mdf và .ldf của SQL Server 2008

  5. Nếu khóa ngoại không tồn tại thì thêm ràng buộc khóa ngoại (Hoặc bỏ ràng buộc khóa ngoại nếu tồn tại) mà không sử dụng Tên?