您好我有一个具有以下结构的数据库:
表格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)