MIN () для даты Max () с GROUP BY в MySQL 5.7 query [duplicate]

Это проблема 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]

4
задан 27 July 2012 в 13:32

2 ответа

Вы не сказали свою СУБД. Следующие решения предназначены для 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. Вы не можете полагаться на порядок вставки. Не пытайтесь!

0
ответ дан 15 August 2018 в 16:50
  • 1
    как работает крест? – cdub 27 July 2012 в 13:12
  • 2
    @chris См. обновление. – ErikE 27 July 2012 в 13:13
  • 3
    что вы имеете в виду уникальные коды, так как образец, который я дал, имеет повторяющиеся коды – cdub 27 July 2012 в 13:13
  • 4
    Если у вас есть отдельная таблица, в которой перечислены все коды с 1 строкой на код! – ErikE 27 July 2012 в 13:15
  • 5
    да, я знаю, что не могу полагаться на порядок вставки. в любом случае мой код является фактическим user.id, который поступает из таблицы пользователя и ссылки на таблицу местоположений с расстоянием и местоположением – cdub 27 July 2012 в 13:16

Вы можете попытаться выполнить вложенный поиск между минимальной группировкой и исходной таблицей.

Это похоже на трюк

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

И это дает:

0
ответ дан 15 August 2018 в 16:50
  • 1
    & quot; Имейте & quot ;? Ты уверен? – ErikE 27 July 2012 в 13:04
  • 2
    @ErikE: Обновлен мой ответ. Мне нравится использовать CTE тоже. – tobias86 27 July 2012 в 13:09
  • 3
    Вы все еще присоединяетесь к Местам, которые будут хуже, чем проект последовательности ... – ErikE 27 July 2012 в 13:11
  • 4
    @ErikE: Я согласен. Производительность лучше с использованием CTE. – tobias86 27 July 2012 в 13:16

Другие вопросы по тегам:

Похожие вопросы: