2017-02-21 119 views
0

之间测得的I具有坐标的两个列表最小表1,A & B在表1从表2添加到基于两个

我需要添加到表1,最接近的坐标C & d列出在表2中

的样本数据是在这里,短短几行:

dropbox.com/s/meda1j6r6hqlcpj/Sites.csv?dl=0

dropbox.com/s/x64imuez3egd3g9/SLT .csv?dl = 0

的计算公式为:

the square root of 
A - C squared 
plus 
B - D squared 

sqrt(((a-c)^2)+((b-d)^2)) 

我在回答这个发现另一个问题:

SQRT(POW(a - c, 2) + POW(b-d, 2)) 

然而,什么是查询?

我是一个MySQL新手 - 上面是毕达哥拉斯的应用,坐标是Eastings和Northings(速度陷阱)。

更新:

此外,我需要之前添加约束7年至5年后。这是-84至+59(月)的措施。在示例数据文件中,以下是字段

WHEN是日期约束,例如SLT文件中的WHEN在站点文件中是-84 < WHEN < 59。 (注意:这不是一个日期格式,它只是一个绝对数字)

我在示例文件所做的字段名称匹配ABC & d,这些都是东进(A & C)和北进(B & d)

如果我可以有这两个结果,即有和没有约束在相同的查询将是理想的。

处理时间并不重要,因为此查询很少运行,只能证明它是准确的。

+1

如果第二张桌子上的更多积分与第一张桌子上的积分有相同的最小距离,会发生什么? – Shadow

+0

好问题,极不可能(因为两台摄像机不能占用相同的物理空间),但需要代码答案。选择具有较早安装日期的字段(字段名称为INSTALL)。然而,鉴于我们认为这绝不会(!)发生,因为他们不能,使用最不复杂的代码解决方案是我的3am建议。事实上,我倾向于要求你假设他们不会 - 因为我不想让代码变得复杂,而我试图理解它。我还有另外一个限制因为同样的原因而没有在这里介绍。 – Anthony500

+0

@ Anthony500即使点B和点C的坐标不相等,点A也可以与点B和点C具有相同的距离。 –

回答

1
select t1.*, t2.* 
from table1 t1 
cross join table2 t2 
where (t2.c, t2.d) = (
    select t3.c, t3.d 
    from table2 t3 
    order by SQRT(POW(t1.a - t3.c, 2) + POW(t1.b-t3.d, 2)), t3.INSTALL 
    limit 1 
) 

这应该有效。但是如果没有样本数据我不能测试。

是的 - 它可能是非常缓慢的庞大数据。但我不确定是否有更快的解决方案。

+0

我的第二个约束是事故(table1)发生在安装日期之前的84个月和之后的59个月之间。我会链接一些(真实的)测试数据。 这是“t2”站点文件,其中包括: C =“EASTING”D =“NORTHING”安装日期=“WHEN” https://www.dropbox.com/s/meda1j6r6hqlcpj/Sites.csv?dl= 0 和 这是一个“t1”文件SLT,其中相关字段为: A =“ACC EC”B =“ACC NC”日期=“当” 日期编号是整月,因此从另一个中减去一个对于-84到+59的约束,这是几个月的时间。 https://www.dropbox.com/s/x64imuez3egd3g9/SLT.csv?dl=0 – Anthony500

+0

我已经向我提到,这有相同的效果,虽然不给予距离,只是允许扣除最短距离:(AC)*(AC)+(BD)*(BD) – Anthony500

+0

@ Anthony500我不明白“-84至+59约束”的原因。但是这将是子查询中的一个条件:“在t1.WHEN - 59和t1.WHEN + 84'之间。如果这没有帮助,你应该发布一些示例数据(编辑你的问题)和预期的结果 - 只有重要的列和只有几行。 –