2010-07-16 45 views
0

所以我有2個表:的SQLite - >尋找兩個最接近的點到兩個不同點

route(#id) 
step(#id,route_id,lat,lng,sequence_order) 

而且2 GPS座標:M1(LAT1,lng1)M2(LAT2,lng2)。

所以,我想找到所有的路線,從2個GPS座標的每個至少有一步距離1.0英里的距離,並且按升序排列。因此,如果我找到Route#25,它距M1有0.4英里的步驟S1,距離M2 0.2英里的步驟S2,只有S1的序列號比S2的序列號差。是否有意義 ?

假設我添加了一個函數來計算距離,我可以申請做很容易:

SELECT r.id,s1.lat,s1.lng,s2.lat,s2.lng,distance(s1.lat,s1.lng,lat1,lng1) as d1,distance(s2.lat,s2.lng,lat2,lng2) as d2 FROM route r 
INNER JOIN step s1 ON r.id = s1.route_id 
INNER JOIN step s2 ON r.id = s2.route_id AND s1.sequence_order < s2.sequence_order 
WHERE d1<1.0 
AND d2<1.0 

我想有行爲,是隻保留最近的座標(s1.lat ,s1.lng)和(s2.lat,s2.lng)到我的點。所以我想我可以這樣做:

ORDER BY d1 
ORDER BY d2 
GROUP BY r.id 

但它只是崩潰。

有什麼想法?

+0

似乎每個'Route'都有一些序列化的'Steps'。但是什麼是表'ZSTEP'?它看起來像你想要一個自我加入表「步驟」。也許真正的桌子被命名爲'ZSTEP',並且爲了這個問題的目的您將其名稱更改爲'Step',但忘記更改第二個實例?我在想這個太多了嗎? ;) – onedaywhen 2010-07-16 11:26:32

+0

其實ZSTEP是我發佈時忘記編輯的真名。 – Julien 2010-07-16 11:32:55

回答

1

你可能想

ORDER BY d1, d2 

爲您的ORDER BY子句。無論如何,碰撞是什麼?

+0

這是斷言失敗。實際上,ORDER BY d1,d2進行二級排序。我想要的是離第一點最近的點和離第二點最近的點。 – Julien 2010-07-16 11:28:21

+0

聲明失敗:我不知道這些,我必須承認。您可以擴展ORDER BY子句並具有ORDER BY d1 + d2;或ORDER BY myfunc(d1,d2);如果這有幫助。你不能有兩個ORDER BY子句。 – 2010-07-16 11:33:40

+0

對不起,這不是斷言失敗。這是C錯誤... 其實我很想擁有d1和d2的最小值。 我正在嘗試不同的方法,所以我會關閉這個問題。謝謝 – Julien 2010-07-16 11:39:02