Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Masalah kueri Sql 2008 - LatLong mana yang ada dalam poligon geografi?

Mengenai 'editan' Anda, tidak sering Anda melihat pertanyaan yang menyertakan "tolong jangan berikan...". Tentunya setiap sedikit membantu? Terutama karena Anda belum benar-benar menunjukkan kepada kami apa yang Anda lakukan tahu tentang STContains atau STIntersects (atau Filter() dalam hal ini)...

Bagaimanapun, saya memiliki database kode pos dan lokasi penyimpanan yang berguna, jadi saya mengganti nama tabel/kolom agar sesuai dengan milik Anda (saya kemudian memiliki 6.535 CrimeLocatoins dan 3.285 GeoShapes). Saya kira Anda sudah mengetahuinya sekarang - tetapi orang lain mungkin menganggap ini berguna...

Kueri berikut mengembalikan jumlah CrimeLocations di setiap 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

Dibutuhkan usia (seperti 20 menit) karena saya belum mengatur indeks geospasial dan ShapeFiles saya memiliki jumlah poin yang tinggi, tetapi berhasil berjalan. Jika saya ingin membatasi hasil seperti yang Anda sarankan:

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

Tentu saja Anda tidak ingin membuat hardcode nomor 500 - sehingga Anda dapat menambahkan COUNT(*) FROM CrimeLocations subquery di sana, atau variabel dengan total dari kueri terpisah.

Apakah itu cukup rumit?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang dilakukan sp_reset_connection?

  2. Ganti nama Batasan CHECK di SQL Server menggunakan T-SQL

  3. Balik Hasil SQL

  4. Konfigurasikan Lucene.Net dengan SQL Server

  5. Tidak dapat digunakan di operator PIVOT karena tidak invarian terhadap NULL