MySQL仅在最新位置时才选择最近的位置

时间:2017-07-28 10:45:23

标签: mysql sql

说我有3张这样的表:

cities
------
name
latitude
longitude

stalls
------
id
name

locations
---------
stall_id
latitude
longitude
date

我想在过去6个月内找到最近的城市摊位。那部分很好 - 我查询了摊位/位置表并使用Haversine来获得距离。一切都好。

这是我目前的查询:

SELECT stalls.name, ( 3959 * acos( cos( radians($lat) ) * cos( radians( locations.lat ) ) * cos( radians( locations.lng ) - radians($lng) ) + sin( radians($lat) ) * sin(radians(locations.lat)) ) ) AS distance
FROM locations
LEFT JOIN stalls ON stalls.id = locations.trader_id
WHERE locations.added > $date
HAVING distance < 10

但是,一个摊位可能在不同的城市有多个新的位置,我只想匹配最新位置的城市。 例如一个摊位可能匹配最接近纽约,但随后为LA添加了一个新位置。现在它应该只在洛杉矶展示6个月而不是纽约 - 至少在添加另一个位置之前。以前的位置需要存储,所以我不能只清除它们。

在查询中执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

获取每个摊位的最近位置:

select l.*
from locations l
where l.date = (select max(l2.date) from locations l2 where l2.stall_id = l.stall_id);

我不确定这是如何适合您的整体查询的。