【发布时间】:2018-11-18 13:17:38
【问题描述】:
我有 3 个包含以下字段的表:
- org(org_id、org_name、位置)
- office(office_id、office_name、位置、org_id)
- 项目(project_id、project_name、位置)
我想找到离给定项目最近的办公室
SELECT office.office_name, org.org_name,
st_distance_sphere(office.location, project.location)*0.001 as
distance
FROM office JOIN org JOIN project
WHERE office.org_id=org.org_id AND
project.project_id=7
ORDER BY distance asc;
上述查询有效并为我提供离项目最近的办公室,但我只需要为每个组织获取 1 个最近的办公室
因此我尝试了以下使用半连接
SELECT office.office_name, org.org_name,
st_distance_sphere(office.location, project.location)*0.001 as
distance
FROM office JOIN org JOIN project
INNER JOIN
( SELECT org.org_id as orgid1,
min(st_distance_sphere(office.location, project.location)*0.0001) as
distance1
FROM office JOIN org JOIN project
WHERE
office.org_id=org.org_id and project.project_id=7
GROUP BY org.org_id
) AS t
ON t.orgid1=org.org_id and t.distance1=min(st_distance_sphere(office.location,project.location)*0.001)
WHERE office.org_id=org.org_id AND project.project_id=7 ;
使用这个,我得到以下错误,原因似乎是 min(st_distance_sphere) 函数。删除它会消除错误,但我没有得到想要的结果。
ERROR 1111 (HY000):组函数使用无效
我做错了什么?任何想法高度赞赏。谢谢
【问题讨论】:
标签: mysql group-by geospatial greatest-n-per-group