mysql - SQL 显示 DISTINCT 行以获得最低值

标签 mysql sql database

我正在使用 MySQL 5.5。我有一个 SQL 问题。

我有下表(oneToMany - 一个员工到多个位置):

+----------+   +-------------------+  +-----------+
| EMPLOYEE |   | EMPLOYEE_LOCATION |  | LOCATION  |
 ----------     -------------------    -----------
|ID        |   |EMP_ID             |  | ID        |
|          |   |LOC_ID             |  | LATITUDE  |
|          |   |                   |  | LONGITUDE |
+----------+   +-------------------+  +-----------+

数据:

+----+          +-------------+       +-------------------------------+
| ID |          |EMP_ID|LOC_ID|       |ID | LATITUDE    | LONGITUDE   |  
+----+          +-------------+       +-------------------------------+
| 1  |          |  1   |  1   |       | 1 | 28.80000000 |-25.76666700 |
| 2  |          |  1   |  2   |       | 2 | 27.35000000 |-25.76266700 |
| 3  |          |  1   |  3   |       | 3 | 27.95000000 |-25.66666700 |
+----+          |  2   |  4   |       | 4 | 26.85000000 |-25.76666700 |
                |  2   |  5   |       | 5 | 28.85000000 |-25.76666700 |
                |  4   |  6   |       | 6 | 28.85000000 |-25.86666701 |
                +-------------+       +-------------------------------+

我的SQL:

select e.ID,
( 6371 * acos( cos( radians(37) ) * cos( radians( o.LATITUDE) ) * cos( radians( o.LONGITUDE) - radians(-122) ) + sin( radians(37) ) * sin( radians( o.LATITUDE) ) ) ) AS distance
from
    www.employee as e
inner join
    www.employee_location as eo
        on e.id=eo.EMP_ID 
inner join
    www.location as o
        on eo.LOC_ID=o.ID        
order by distance

正在返回:

ID| DISTANCE
--+------------------
3 | 8622.766267835324
2 | 8630.684502219874
1 | 8633.923476508438
1 | 8697.058324230797
1 | 8728.471585032592
2 | 8760.772628068693

我正在尝试制定我的 SQL,以便它只为每个 EMPLOYEE 返回一行(3 行)。返回的每一行都是具有按 DISTANCE 排序的最低 DISTANCE 值的行。

例如,我想要以下内容:

ID| DISTANCE
--+------------------
3 | 8622.766267835324
2 | 8630.684502219874
1 | 8633.923476508438

感谢任何帮助,谢谢。

最佳答案

不需要子查询。只需在您的查询中进行分组,并根据距离进行分组 -

select e.ID,
min(( 6371 * acos( cos( radians(37) ) * cos( radians( o.LATITUDE) ) * cos( radians( o.LONGITUDE) - radians(-122) ) + sin( radians(37) ) * sin( radians( o.LATITUDE) ) ) )) AS distance
from
    www.employee as e
inner join
    www.employee_location as eo
        on e.id=eo.EMP_ID 
inner join
    www.location as o
        on eo.LOC_ID=o.ID   
group by e.ID     
order by distance

关于mysql - SQL 显示 DISTINCT 行以获得最低值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596424/

相关文章:

mysql - GRANT 中的密码与现有用户名的密码相同

php - 如何使用HTML和PHP搜索项目并将结果与​​表单输出在同一页面上?

sql - 如果表中存在特定值则返回 True - sql

mysql - SQL 查询复制值 - 初学者

java - 如何配置 Hibernate 以立即应用所有保存、更新和删除?

MySQL 组复制或单个服务器就足够了?

php - 过去 24 小时内查看最多的主题

mysql - 如何在 SQL 语句中复制以下 excel 计算?

php - 按关联计数订购 DQL 连接

asp.net-mvc - 防止授权用户编辑不属于他的数据