我有一个表,其中存储了用户从不同点(如startplace1到workplace 1、startplace1到workplace 2、startplace1到workplace 3、startplace2到workplace1、startplace2到workplace1)的所有距离
Every line has an 'ID', 'AID' (=memberid), 'FROM', 'TO', 'DISTANCE'
仅供参考:“from”和“to”字段可能是相同的代码,但不是同一个位置(存储在另一个表中,例如dom1是home)。
我试图为每个“aid”
(=memberid)
选择表中的最小距离,用于每个startpoint(field from)和与距离最小的记录相关的一些其他字段我正在使用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`
这给了我最小的距离,但是字段“to”与最小距离的记录无关。我也试过按距离排序,但都一样。
如何从距离最小的记录中选择字段“to”,按“aid”字段和“from”字段分组?
最佳答案
连接到子查询,该子查询查找每个辅助对象和起点的最小距离:
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;