我有一个表,用于存储来自不同点的用户的所有距离(例如startplace1到工作区1,startplace1到工作区2,startplace1到工作区3,startplace2到workplace1,startplace2到workplace1)
Every line has an 'ID', 'AID' (=memberid), 'FROM', 'TO', 'DISTANCE'
仅供参考:'来自'& '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`
这给了我最小的距离,但是'to'字段与最小距离的记录无关。我也尝试使用ORDER_BY距离ASC,但它是一样的。
如何从距离最小的记录中选择字段'to',按'aid'-field和'from'-field分组?
答案 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;