select возвращает неверный идентификатор при использовании max - PullRequest
1 голос
/ 05 января 2012

Принимая таблицу, подобную этой.

id town_id begin_date

12 2       2011-10-10
23 2       2011-11-10 
43 2       2012-01-01 

сейчас, если я сделаю

SELECT id, MAX(begin_date) AS mx
FROM regions

Приведенный выше запрос возвращает максимальную дату, но идентификатор неверен:

id mx
12 2012-01-01

Ожидается ли это?
Как получить верный идентификатор (43, 2012-01-01)

Ответы [ 3 ]

4 голосов
/ 05 января 2012

Если вы пытаетесь получить идентификатор, связанный с датой MAX (), то вы можете сделать:

SELECT id, begin_date from regions order by begin_date DESC LIMIT 1;
3 голосов
/ 05 января 2012

Вы забыли предложение GROUP BY:

SELECT id, MAX(begin_date) AS mx
FROM regions
GROUP BY 1
0 голосов
/ 01 апреля 2019

Я также хочу добавить другое возможное решение к этому ответу, которое могло бы быть более интуитивным, потому что принятый ответ на самом деле является неправильным, и только комментарий ниже решает его частично.Зачем?Потому что это работает, только если вы хотите сгруппировать результат по town_id.Если вам нужно решение, которое извлекает строку с абсолютной максимальной датой, вы можете использовать только ответ Франциско Сотоса или запрос ниже.

SELECT ID, begin_date from regions WHERE begin_date = (SELECT MAX(begin_date) FROM regions)

В опубликованном запросе не используется limit, а вместо этого требуетсяподзапрос.ИДК, который быстрее, но как дополнительная пища для размышлений.

...