-- not what you want SELECT service_id, min(distance) FROM table GROUP BY service_id; #### SELECT stop_reference, service_id, distance FROM table ORDER BY service_id, distance; #### my $last_service_id = -8675309; # for a good time, call while ($sth->fetch()) { if ($service != $last_service_id) { print "min dist for service '$service' = '$distance' at stop '$stops'\n"; $last_service_id = $service; } }