2017-02-21 7 views
0

間で測定された最小値に基づいて、表1に表2から追加Iが表1に追加する必要が表1はI座標の二つのリスト、& Bを有する2つ

あり、最も近いC & Dに記載されている座標

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

dropbox.com/s/x64imuez3egd3g9/SLT:表2に

サンプル・データは、ここだけの数行です.csv?dl = 0

計算は次のとおりです。私は別の質問への回答でこれを発見した

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

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

すなわち:

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

しかし、クエリは何ですか?

私はMySQLの初心者です - 上記はPythagorasのアプリケーションであり、座標はスピードトラップのEastings and Northingsです。

アップデート:私は5年後にする前に、7年間の制約を追加する必要があることに加えて

。これは-84〜+ 59(月)の尺度です。サンプルデータファイルでは、次のフィールドがあります。

WHENは日付制約です。たとえば、SLTファイルのWHENはサイトファイルの-84 < WHEN <です。私は、サンプルファイルのフィールド名は、すべてEastings(& C)とNorthings(B & D)

あるABC & Dと一致してきた

(それだけで絶対数だ、それが日付形式ではない注)

私は両方の結果を持つことができます。すなわち、理想的であろう同じクエリ内に制約がある場合とない場合です。

このクエリはほとんど実行されず、それが正確であることを証明するために処理時間は重要ではありません。

+1

2番目のテーブルのより多くのポイントが1番目のテーブルのポイントまでの最小距離が同じ場合はどうなりますか? – Shadow

+0

良い質問、非常にありそうもない(2台のカメラが同じ物理空間を占有することはできないため)コード回答が必要です。インストール日の早いものを選択してください(フィールド名はINSTALLです)。しかし、私たちはこれが決して(!)起こることはないと考えているので、最小限の複雑なコードソリューションを使用することができないので、私の3amの提案です。実際には、私はそれを理解しようとしている間にコードを複雑にしたくないので、あなたがそうしないと仮定するように頼んでいます。私は同じ理由でここに紹介していないもう一つの制約があります。 – Anthony500

+0

@ Anthony500点Aと点Bの座標が等しくない場合でも、点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

私の2番目の制約は、事故(table1)が起こるということですインストール日の84ヶ月前と59ヶ月後の間。いくつかの(実際の)テストデータをリンクします。 これは "t2"サイトファイルです。 C = "イースニング" D = "ノースティング"インストール日= "時" https://www.dropbox.com/s/meda1j6r6hqlcpj/Sites.csv?dl= 0 および これは "t1"ファイルSLTです。関連するフィールドは次のとおりです。 A = "ACC EC" B = "ACC NC"日付= "WHEN" 日付番号は1か月間で、 -84〜+59の制約の数ヶ月。 https://www.dropbox.com/s/x64imuez3egd3g9/SLT.csv?dl=0 – Anthony500

+0

私はこれに同じ効果があると言いましたが、距離は与えられませんが、最短距離:(AC)*(AC)+(BD)*(BD) – Anthony500

+0

@ Anthony500私は "-84 to +59の制約"の理由を理解していません。しかし、サブクエリの条件は、 't1.WHEN - 59 AND t1.WHEN + 84'の間のどこのt3.WHENです。それが助けにならない場合は、いくつかのサンプルデータ(質問の編集)と期待される結果を投稿する必要があります。 –

関連する問題