我有以下SQL:
select code, distance from places;
输出如下:
CODE DISTANCE LOCATION 106 386.895834130068 New York, NY 80 2116.6747774121 Washington, DC 80 2117.61925131453 Alexandria, VA 106 2563.46708627407 Charlotte, NC
我希望能够仅获取一个代码并获得最近的距离。所以我希望它返回这个:
CODE DISTANCE LOCATION 106 386.895834130068 New York, NY 80 2116.6747774121 Washington, DC
我最初有这样的东西:
SELECT code, min(distance), location GROUP BY code HAVING distance > 0 ORDER BY distance ASC
如果我不想获得与最小距离相关联的正确位置,则最小值显示效果很好。如何获取最小距离(和距离)以及正确的位置(取决于表格中插入内容的顺序,有时您可能会得到纽约距离,但夏洛特位于“位置”)。
为了获得正确的关联位置,您需要加入一个子选择,该子选择在外部主表中的距离与子选择中得出的最小距离相匹配的情况下,获得每个代码的最小距离。
SELECT a.code, a.distance FROM places a INNER JOIN ( SELECT code, MIN(distance) AS mindistance FROM places GROUP BY code ) b ON a.code = b.code AND a.distance = b.mindistance ORDER BY a.distance