MYSQL: возвращаемое значение, связанное с наибольшим числом с GROUP BY - PullRequest
2 голосов
/ 10 января 2020

В моей таблице есть записи, упорядоченные по timestamp. Я хочу вернуть одну запись с максимальным значением timestamp.

. Это работает:

SELECT max(`timestamp`) FROM `messages`

Однако возвращается только значение timestamp. Поэтому я пытаюсь выбрать значение message:

SELECT max(`timestamp`), `message` FROM `messages`

Я получаю эту ошибку:

In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'database.messages.message'; this is incompatible with sql_mode=only_full_group_by

Поэтому я добавляю GROUP BY:

SELECT max(`timestamp`), `message` FROM `messages`
GROUP BY `message`

Однако это просто приводит к возврату каждого значения в таблице.

Я понимаю, что GROUP BY должна объединять идентичные записи, просто я понятия не имею, почему я вынужден использовать его в этой ситуации и как просто получите последнюю запись больше, чем все.

Ответы [ 2 ]

5 голосов
/ 10 января 2020

Я хочу вернуть одну запись с самой высокой отметкой времени.

Не объединять. Вы можете сортировать и ограничивать вместо этого:

select * from messages order by timestamp desc limit 1
0 голосов
/ 10 января 2020

Пожалуйста, попробуйте запрос ниже mysql. Первый внутренний запрос получить наибольшее число. после этого внешнего запроса удалите повторение данных.

SELECT 
 * 
FROM
  (SELECT 
    `timestamp` 
  FROM
    `messages` 
  ORDER BY `timestamp`) 
GROUP BY `timestamp` 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...