Если имеется следующий набор данных:
Fqdn RefQty
abcde.com 25
abcdz.uk 10
abcdf.es 15
bcdef.fr 30
bcdeg.de 25
bcdeh.ch 50
В MySQL, как выбрать, чтобы иметь Fqdn, где LEFT (Fqdn, 4) имеет MAX (RefQty)? Я могу найти LEFT (Fqdn, 4) с MAX (RefQty), но при выборе Fqdn я не получаю правильный Fqdn? В этом случае я бы ответил:
Fqdn
abcde.com
bcdeh.ch
Это казалось тривиальным, но почему-то я застрял на нем несколько часов. Помощь была бы оценена.
Найдите максимальные значения для обрезанных строк во внутреннем запросе и используйте эти подсчеты во внешнем запросе во время соединения.
SELECT T.Fqdn
FROM
YOUR_TABLE T
INNER JOIN
(SELECT LEFT(Fqdn, 4) Fqdn_Trim, MAX(RefQty) as MAX_COUNT
FROM YOUR_TABLE
GROUP BY LEFT(Fqdn, 4)) A
ON LEFT(T.Fqdn, 4) = A.Fqdn_Trim AND T.RefQty = A.MAX_COUNT
ORDER BY T.RefQty DESC;
Одним из решений является использование левого соединения с самим собой: он ищет все Fqdns, у которых нет другой строки с тем же Fqdn, но с более высоким RefQty. Это должны быть строки с наивысшим значением RefQty:
SELECT
t1.Fqdn
FROM
mytable AS t1 LEFT JOIN mytable AS t2 ON (LEFT(t1.Fqdn, 4) = LEFT(t2.Fqdn, 4) AND
t1.RefQty < t2.RefQty)
WHERE
t2.Fqdb IS NULL
ORDER BY
для полноты.