こんにちは、次の構造のデータベースがあります。
表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になります。これは、私が必要とするタイプのクエリです...
次の投稿は、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)