0

マップ上に天気マーカーの表が 1 つあり、各マーカーの種類は風または雲です。

各雲マーカーについて、最も近い風マーカーの「WindDir」フィールド値を見つけたいと考えています。自己結合でうまくいくように思えますが、クエリを作成するのは難しいことがわかっています。

以下は、間違った疑似 SQL です。距離の値が必要な値になることがわかっています。風マーカーの「WindDir」値を取得できるように、各雲マーカーに最も近い風マーカーをクエリで見つける方法が必要なだけです。

SELECT w1.ID AS ID, w1.Lat AS Lat, w1.Lng AS Lng, 
       w2.WindDir AS WindDir, 
       MIN(SQRT(POWER(ABS(w1.Lng - w2.Lng), 2) + POWER(ABS(w1.Lat - w2.Lat), 2))*60) AS Distance 
FROM Weather w1 WHERE w1.Marker="Cloud"
LEFT JOIN Weather w2 WHERE w2.Marker="Wind"
USING ID  

機能するバージョンを作成するためのアドバイスをいただければ幸いです。

-ケン

4

1 に答える 1

0

あなたはかなり近いです(基本的には構文のために並べ替えただけです)

SELECT w1.ID AS ID, w1.Lat AS Lat, w1.Lng AS Lng, 
       w2.WindDir AS WindDir, 
       (SQRT(POWER(ABS(w1.Lng - w2.Lng), 2) + POWER(ABS(w1.Lat - w2.Lat), 2))*60) AS Distance 
FROM Weather w1 LEFT JOIN Weather w2 USING (ID)
WHERE w1.Marker="Cloud" AND w2.Marker="Wind"
ORDER BY Distance DESC
LIMIT 1

最も近い結果が必要だと仮定して、LIMIT 1返されるものを制限するために a を追加しました。

余談ですが、2 つの緯度/経度のペア間の距離を見つけるこの方法では、かなり小さな変化であっても良い結果が得られる可能性は低いです。これらの距離を概算する方法があります...

于 2011-01-17T05:26:44.350 に答える