Это проблема DNS.
Как было проверено OP в комментариях, данные могут выходить в Интернет из-за VPN, поэтому проблема заключается в том, что он не получает DNS-сервер с которыми можно запросить. Мы также подтвердили, что DNS-запросы могут выполняться исходящими. Таким образом, нам просто нужно убедиться, что система всегда может достичь DNS-сервера.
В вашем /etc/resolv.conf и когда вы подключены к вашей VPN, должно быть что-то вроде этого, по крайней мере (IP-адреса могут отличаться!) в файле:
nameserver 127.0.1.1
nameserver 8.8.8.8
Если нет, то нам нужно убедиться, что у вас установлен DNS-сервер, чтобы вы могли разрешать имена доменов. Таким образом, замените содержимое /etc/resolv.conf на следующее (Google DNS):
nameserver 8.8.8.8
nameserver 8.8.4.4
, а затем попробуйте и обычно используйте Интернет через VPN.
Если вы сделаете это и он не работает, потому что /etc/resolv.conf продолжает перезаписываться, тогда вы можете подумать о том, чтобы заставить его быть неизменным с sudo chattr +i /etc/resolv.conf. Если вы абсолютно уверены, что вам не придется менять DNS-серверы, не делайте это изменение, потому что вы столкнетесь с проблемами с DHCP или пытаетесь установить DNS-серверы имен и сбой, потому что ничего нельзя редактировать /etc/resolv.conf. [ ! d5]
Вы не сказали свою СУБД. Следующие решения предназначены для SQL Server.
WITH D AS (
SELECT code, distance, location,
Row_Number() OVER (PARTITION BY code ORDER BY distance) Seq
FROM places
)
SELECT *
FROM D
WHERE Seq = 1
Если у вас есть таблица с уникальными кодами и индекс в вашей таблице «Места» в [Код, расстояние], тогда решение CROSS APPLY может быть лучше: [ ! d1]
SELECT
X.*
FROM
Codes C
CROSS APPLY (
SELECT TOP 1 *
FROM Places P
WHERE C.Code = P.Code
ORDER BY P.Distance
) X
Я не могу долго работать над решением для mysql.
P.S. Вы не можете полагаться на порядок вставки. Не пытайтесь!
Вы можете попытаться выполнить вложенный поиск между минимальной группировкой и исходной таблицей.
Это похоже на трюк
SELECT MinPlaces.Code, MinPlaces.Distance, Places.Location
FROM Places INNER JOIN
(
SELECT Code, MIN(Distance) AS Distance
FROM Places
GROUP BY Code
HAVING MIN(Distance) > 0
) AS MinPlaces ON Places.Code = MinPlaces.Code AND Places.Distance = MinPlaces.Distance
ORDER BY MinPlaces.Distance ASC
UPDATE: Протестировано, используя следующее:
DECLARE @Places TABLE ( Code INT, Distance FLOAT, Location VARCHAR(50) )
INSERT INTO @Places (Code, Distance, Location)
VALUES
(106, 386.895834130068, 'New York, NY'),
(80, 2116.6747774121, 'Washington, DC'),
(80, 2117.61925131453, 'Alexandria, VA'),
(106, 2563.46708627407, 'Charlotte, NC')
SELECT MinPlaces.Code, MinPlaces.Distance, P.Location
FROM @Places P INNER JOIN
(
SELECT Code, MIN(Distance) AS Distance
FROM @Places
GROUP BY Code
HAVING MIN(Distance) > 0
) AS MinPlaces ON P.Code = MinPlaces.Code AND P.Distance = MinPlaces.Distance
ORDER BY MinPlaces.Distance ASC
И это дает: