MySQL MAX подзапрос - PullRequest
       19

MySQL MAX подзапрос

0 голосов
/ 28 ноября 2011

У меня проблема с MySQL в данный момент. Я пытаюсь определить наибольшее значение float из моей таблицы следующим образом:

SELECT `id` 
FROM `LOTRESULTS` 
WHERE 
  `value`= (SELECT MAX(value) FROM `LOTRESULTS`) AND 
  `lot_id` = 180 
ORDER BY `id` DESC 
LIMIT 1

Это работает всякий раз, когда я выбираю, скажем, id 180, но ни одна из других комбинаций не работает.

Есть 3 записи с 180 как lot_id и 2 вхождения с 179 как lot_id и т. Д. Он работает случайным образом, он не работает для большинства записей в БД.

Я что-то не так делаю? Должен ли я изменить тип данных столбца значения?

Заранее спасибо, ребята!

p.s. Я также попробовал:

SELECT `id` FROM `LOTRESULTS` WHERE `value`= (SELECT MAX(value) FROM
`LOTRESULTS`) AND `lot_id` = 180

и

SELECT `id` FROM `LOTRESULTS` WHERE `value`= (SELECT MAX(value) AS
`value` FROM `LOTRESULTS`) AND `lot_id` = 180

с такими же результатами ...

Ответы [ 3 ]

3 голосов
/ 28 ноября 2011

Ваш внутренний запрос будет извлекать самое высокое поле value В ЛЮБОМ МЕСТЕ в таблице, независимо от того, в какой лот он входит.Внешний запрос затем пытается извлечь все идентификаторы, которые имеют это максимальное значение AND, являются частью определенного лота.

Если максимальное значение принадлежит лоту 123, но вы выбираете идентификаторы для лота 456, вы не получите результатов.

Запрос должен быть:

SELECT id
FROM LOTRESULTS
WHERE value = (
    SELECT MAX(value) AS value
    FROM LOTRESULTS
    WHERE lot_id = 180
) AND lot_id = 180

Удвоенный lot_id = 180 обрабатывает случай, когда два + разных лота могут иметь одинаковое максимальное значение.Без 'external and' вы получите идентификаторы для двух + лотов.

2 голосов
/ 28 ноября 2011

Вам не нужно использовать подзапрос или JOIN,
простое где + порядок + лимит подойдет: -

SELECT id FROM LOTRESULTS WHERE lot_id = 180 ORDER BY value DESC LIMIT 1;
1 голос
/ 28 ноября 2011
SELECT *
FROM LOTRESULTS
WHERE whatever...
ORDER BY value DESC
LIMIT 1
...