【问题标题】:MySQL select nearest location only if also latest locationMySQL仅在也是最新位置时才选择最近的位置
【发布时间】:2017-07-28 18:52:01
【问题描述】:

假设我有 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 个月,而不是纽约 - 至少在添加另一个位置之前。以前的位置需要存储,所以我不能清除这些。

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

【问题讨论】:

标签: mysql sql


【解决方案1】:

要获取每个摊位的最新位置:

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

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

【讨论】:

  • 所以我想我可以在子查询中做类似的事情,但这一定是最好/最有效的方式吗?
  • @Wazzbast 。 . .有很多方法可以做到这一点。使用locations(stall_id, date) 上的索引,这应该具有极具竞争力的性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多