Mysql 通过第二个表连接具有条件的查询

Mysql 通过第二个表连接具有条件的查询,mysql,sql,Mysql,Sql,我有两个表一个是用户,第二个是位置 位置是与用户的一对多关系。 我想根据最新位置列出所有用户,条件距离(km)>0.01。有人喜欢吗 我尝试了。语法错误(查询1错误:“where子句”中的未知列“d”) 编辑 桌子 -使用者 -位置(多个)(id、用户id、lat、lng、距离、创建地点) 预期结果 -最新位置距离小于0.1(双倍距离)的用户列表(不重复)您可以使用窗口功能: select t.* from (select u.*, l.*, row_number()

我有两个表一个是用户,第二个是位置 位置是与用户的一对多关系。 我想根据最新位置列出所有用户,条件距离(km)>0.01。有人喜欢吗

我尝试了。语法错误(查询1错误:“where子句”中的未知列“d”)

编辑

桌子 -使用者 -位置(多个)(id、用户id、lat、lng、距离、创建地点)

预期结果
-最新位置距离小于0.1(双倍距离)的用户列表(不重复)

您可以使用窗口功能:

select t.*
from (select u.*, l.*,
             row_number() over (partition by u.id order by l.created_at desc) as seq
      from users u inner join
           locations l
           on l.user_id = u.id
     ) t
where seq = 1 and distance > 0.01;

您可以使用窗口功能:

select t.*
from (select u.*, l.*,
             row_number() over (partition by u.id order by l.created_at desc) as seq
      from users u inner join
           locations l
           on l.user_id = u.id
     ) t
where seq = 1 and distance > 0.01;

WHERE
子句中不允许使用派生列
d
,但可以使用
HAVING
子句:

having d > 0.01
如果不能使用窗口函数,另一种获得所需结果的方法是将表连接到一个查询,该查询使用
NOT EXISTS
返回所需的位置:

select u.*, t.distance
from users u inner join ( 
  select l.* from locations l
  where not exists (select 1 from locations where user_id = l.user_id and created_at > l.created_at)
    and l.distance > 0.01 
) t on t.user_id = u.id

WHERE
子句中不允许使用派生列
d
,但可以使用
HAVING
子句:

having d > 0.01
如果不能使用窗口函数,另一种获得所需结果的方法是将表连接到一个查询,该查询使用
NOT EXISTS
返回所需的位置:

select u.*, t.distance
from users u inner join ( 
  select l.* from locations l
  where not exists (select 1 from locations where user_id = l.user_id and created_at > l.created_at)
    and l.distance > 0.01 
) t on t.user_id = u.id

样本数据和期望的结果将非常有用。如何计算距离?@Gordon Linoff插入时自动计算距离。我们应该猜猜看吗?MySQL不返回简洁的“语法错误”。返回的错误通常有一个有用的提示,错误号在MySQL文档中有描述。是的,查询1错误:“where子句”样本数据和所需结果中的未知列“d”将非常有用。如何计算距离?@Gordon Linoff插入时自动计算距离。我们应该猜猜看吗?MySQL不返回简洁的“语法错误”。返回的错误通常有一个有用的提示,错误号在MySQL文档中有描述。是的,查询1错误:“where子句”中的未知列“d”