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

Jak mohu rozšířit tento SQL dotaz, abych našel k nejbližších sousedů?

Co se stane, když odeberete TOP (1) WITH TIES z vnitřního dotazu a nastavte vnější dotaz tak, aby vracel horní k řádky?

Také by mě zajímalo, zda tato novela vůbec pomáhá. Mělo by to být efektivnější než použití TOP :

DECLARE @start FLOAT = 1000
        ,@k INT = 20
        ,@p FLOAT = 2;

WITH NearestPoints AS
(
     SELECT *
            ,T.g.STDistance(@x) AS dist
            ,ROW_NUMBER() OVER (ORDER BY T.g.STDistance(@x)) AS rn
     FROM Numbers 
     JOIN T WITH(INDEX(spatial_index)) 
     ON   T.g.STDistance(@x) <  @start*POWER(@p,Numbers.n)
     AND (Numbers.n - 1 = 0 
          OR T.g.STDistance(@x) >= @start*POWER(@p,Numbers.n - 1)
         )
)
SELECT * 
FROM NearestPoints
WHERE rn <= @k;

NB - netestováno - nemám zde přístup k SQL 2008.



  1. Používáte spouštěče jako alternativu agregační funkce SQL?

  2. Načítání obrázků ze serveru SQL Server 2008 a jejich zobrazení v řadiči obrázků asp.net

  3. Chyba syntaxe MySQL, nerozpoznané klíčové slovo null

  4. Úprava souboru ze Sublime Text 2 z příkazového řádku, když SSH přešel do virtuálního boxu Vagrant (Linux Ubuntu Machine)