2017-02-21 112 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'之間。如果這沒有幫助,你應該發佈一些示例數據(編輯你的問題)和預期的結果 - 只有重要的列和只有幾行。 –