从表中的最小值中选择具有分组依据的值

时间:2018-02-15 09:06:47

标签: mysql sql codeigniter

我有一个表,用于存储来自不同点的用户的所有距离(例如startplace1到工作区1,startplace1到工作区2,startplace1到工作区3,startplace2到workplace1,startplace2到workplace1)

Every line has an 'ID', 'AID' (=memberid), 'FROM', 'TO', 'DISTANCE'

Tablestructure

仅供参考:'来自'& 'to'可能是相同的代码,但它不是同一个地方(存储在另一个表中,只是例如dom1是home)。

我正在尝试选择中的最小距离,以用于每个'辅助' (=memberid) 每个起始点 (字段来自)以及与距离最小的记录相关的一些其他字段

我正在使用codeigniter,这就是我已经拥有的:

$this->db->SELECT('aid,from,to,min(distance) as mindistance');
$this->db->FROM('distances');
$this->db->GROUP_BY('aid');
$this->db->GROUP_BY('from');

查询

SELECT `aid`, `from`, `to`, max(distance) as maxdistance FROM (`distances`) GROUP BY `aid`

Results without order by

这给了我最小的距离,但是'to'字段与最小距离的记录无关。我也尝试使用ORDER_BY距离ASC,但它是一样的。

Results with order by

如何从距离最小的记录中选择字段'to',按'aid'-field和'from'-field分组?

1 个答案:

答案 0 :(得分:1)

加入子查询,查找每个辅助和起点的最小距离:

SELECT d1.aid, d1.`from`, d1.to, d1.distance
FROM distances d1
INNER JOIN
(
    SELECT aid, `from`, MIN(distance) as mindistance
    FROM distances
    GROUP BY aid, `from`
) d2
    ON d1.aid = d2.aid AND
       d1.`from` = d2.`from` AND
       d1.distance = d2.mindistance;