您好我有以下結構的數據庫:PostgreSQL的複雜查詢找到最匹配的兩個字段的值
表1:
time(type timestamp) longitude(type string) latitude(type string)
2:00 -110.4365 38.7463
2:00 -110.2743 38.7983
2:00 -102.4434 36.9438
3:00 -112.3254 39.2222
etc etc etc
現在我有一些代碼,繪製值,並且當它因此失去了一些準確性。用戶可以單擊這些點並查詢數據庫以獲取關於該點的更多信息。然而,由於繪圖功能失去了一些準確性,我需要在查詢中解釋這一點。
這樣的想法是,我想查詢時間= x和也(緯度=最接近值y和經度=最接近的值到z)。你看最近的值取決於經度和緯度而這正是我越來越困惑,如何進行。
可以說,我一直在尋找:
Time = 2:00
Longitude = -110.3421
Latitude = 38.7587
現在,如果我做一個查詢:
Time = 2:00 and Longitude = closest to -110.3421
那麼結果將是第2行。
但是,如果我做的:
Time = 2:00 and Latitude = closest to 38.7587
然後結果將第1行中
如果我做一個查詢:
Time = 2:00 and Longitude = closest to -110.3421 and Latitude = closest to 38.7587
那麼結果將是第1行。這是我需要查詢的類型......
我找到了以下職位上最接近值的查詢有用的一個領域:
https://stackoverflow.com/a/6103352/1800665
謝謝, 詹姆斯
編輯:我有以下幾點:
(SELECT * FROM (
(SELECT * FROM Table1 WHERE cast(latitude as double precision) >= '38.7587' AND healthtime = '2:00' AND cast(longitude as double precision) >= '-110.3421')
UNION ALL
(SELECT * FROM Table1 WHERE cast(latitude as double precision) < '38.7587' AND healthtime = '2:00' AND cast(longitude as double precision) < '-110.3421')
) as nearest ORDER BY (abs('38.7587'-cast(latitude as double precision)) + abs('-110.3421'-cast(longitude as double precision))) LIMIT 1)
聽起來像是你想http://postgis.refractions.net/ –
謝謝,但最好我想不必安裝附加軟件。緯度和經度字段實際上是字符串類型,而不是地理數據類型。 –
另請注意,「(最接近X,最接近Y)」不同於「最接近(X,Y)」。 –