sql >> Databáze >  >> RDS >> Sqlserver

Problém dotazu SQL 2008 – který LatLong existuje v geografickém polygonu?

Pokud jde o vaše „úpravy“, nestává se často, že byste viděli otázku obsahující „neposkytujte prosím...“. Určitě pomůže každá maličkost? Zejména proto, že jste nám ve skutečnosti neukázali, co děláte vědět o STContains nebo STIntersects (nebo Filter() na to přijde)...

Každopádně jsem měl po ruce databázi PSČ a umístění obchodů, takže jsem tabulky/sloupce přejmenoval tak, aby odpovídaly vašim (mám pak 6 535 CrimeLocatoins a 3 285 GeoShapes). Předpokládám, že už jste na to přišli – ale někomu to může být užitečné...

Následující dotaz vrátí počet CrimeLocations v každém 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

Trvá to věky (asi 20 minut), protože jsem nenastavil žádné geoprostorové indexy a moje soubory ShapeFiles mají vysoký počet bodů, ale běží úspěšně. Pokud bych chtěl omezit výsledky, jak navrhujete:

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

Samozřejmě nechcete napevno kódovat číslo 500 – takže můžete přidat COUNT(*) FROM CrimeLocations poddotaz nebo proměnná s celkovým počtem ze samostatného dotazu.

Je to dostatečně složité?




  1. node-postgres vytvořit databázi

  2. Jak mohu vybrat databázi MySQL pro použití s ​​PDO v PHP?

  3. Zobrazení příspěvků odběratele a vlastních příspěvků uživatele

  4. jOOQ vkládací dotaz s vracením vygenerovaných klíčů