我有一组30000个单位的表,其中每个单位的位置由坐标(X,Y)
定义。我想知道哪些单位距离每个单元都有一定的距离?SQL:使用数学运算匹配表
Ex。
UnitiID X Y
A 10 15
B 10 25
C 25 15
proc sql;
create table work.Test2 as
select distinct
a.UnitID,
a.X,
a.Y,
b.UnitID as CloseUnit label="CloseUnit",
sqrt((a.X-b.X)**2 + (a.Y-b.Y)**2) as distance
from
work.Test as a
left join
work.Test as b
on
0<sqrt((a.X-b.X)**2 + (a.Y-b.Y)**2) <=15
;
quit;
结果:
UnitiID X Y CloseUnit Distance
A 10 15 B 10
A 10 15 C 15
B 10 25 A 10
C 25 15 A 15
这需要整个表了大量的CPU时间,因为我们会做300'000^2的比较,我怎么可能瓶坯这个任务?
几个DBMS具有空间特征。你在做什么? (SQL-Server,Postgres,Oracle,...?) – 2012-08-01 14:09:46
您可以在边界框((x + - r),(y + - d))上重新添加一个额外的位置,这将削减大量的比较。可以是'ABS(a.x-b.x)<= r AND ABS(a.y-b.y)<= r' @ypercube:SAS具有SQL语言的(有限)实现。 – wildplasser 2012-08-01 14:11:39
您可以通过平方双方(即删除sqrt并使用225代替15)来跳过sqrt。 – dasblinkenlight 2012-08-01 14:13:56