如何选择属于同一组的具有最低值的两行?

时间:2016-08-30 16:23:22

标签: mysql sql

我目前正在使用以下查询来选择两个"工人"可以通过以最慢的速度到达目的地,考虑到当他们能够并且需要在指定的时间到达目的地时他们都会离开。

SELECT worker_id, department, [ complicated equation using location, destination, departure and arrival time] AS mph
FROM workers
HAVING mph < 500
ORDER BY mph
LIMIT 2

这样可以获得绝对最好的两个。但我现在需要做的是确保所选择的工人来自同一个department。所以约翰和萨尔来自department A,蒂姆和丽塔来自department B.约翰的mph是20,而萨尔是60.蒂姆&#39 ; mph是35,丽塔是50.由于Tim和Rita的最高mph较低(50),所以应该选择它们。

修改

我应该提到,如果一个部门只有一个工人可以使其低于500英里/小时,那么SELECT应该从一个有两个部门的部门返回用户。如果没有两个部门,那么只选择一个部门。

1 个答案:

答案 0 :(得分:2)

选择具有最高typedef的工作人员并按该部门过滤您的查询:

mph

<强>更新

如果您不想只选择一个工作人员,请同时加入第二个工作人员:

SELECT w.worker_id, w.department, [ complicated equation using location, destination, departure and arrival time] AS mph
FROM workers w
CROSS JOIN (

    SELECT department, [ complicated equation using location, destination, departure and arrival time] AS mph1
    FROM workers
    HAVING mph1 < 500
    ORDER BY mph1
    LIMIT 1

) w2
WHERE w.department = w2.department
HAVING mph < 500
ORDER BY mph
LIMIT 2