说我有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个月而不是纽约 - 至少在添加另一个位置之前。以前的位置需要存储,所以我不能只清除它们。
在查询中执行此操作的最佳方法是什么?
答案 0 :(得分:1)
获取每个摊位的最近位置:
select l.*
from locations l
where l.date = (select max(l2.date) from locations l2 where l2.stall_id = l.stall_id);
我不确定这是如何适合您的整体查询的。