ОШИБКА 1055 (42000): Выражение № 1 списка SELECT отсутствует в предложении GROUP BY ... это несовместимо с sql_mode = only_full_group_by [duplicate]

0

Я использую MYSQL 5.7. Я хочу получить последние строки с отличным device_id. Я пробовал эти запросы:

Запрос 1

SELECT `table`.`id`, `table`.`device_id` FROM `table` WHERE (id IN (SELECT id FROM (SELECT * FROM table ORDER BY date_modified DESC) AS last_modified GROUP BY device_id) and device_id <> '');

+----+------------------+
| id | device_id        |
+----+------------------+
|  5 | ffcecafe5eed4fba |
|  6 | ffcecafe5eed4fba |
|  8 | 71085f00e527bae0 |
+----+------------------+
3 rows in set (0.00 sec)

Но это не удаляет дубликаты.

SubQuery 1

SELECT id FROM (SELECT * FROM table ORDER BY date_modified DESC) AS last_modified GROUP BY device_id;
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'last_modified.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Это дало ошибку. Затем я нашел на веб-сайте MySQL использовать ANY_VALUE(), чтобы удалить эту ошибку.

SubQuery 2

SELECT ANY_VALUE(id) FROM (SELECT * FROM table ORDER BY date_modified DESC) AS last_modified GROUP BY device_id;
+---------------+------------------+
| ANY_VALUE(id) | device_id        |
+---------------+------------------+
|             7 |                  |
|             8 | 71085f00e527bae0 |
|             5 | ffcecafe5eed4fba |
+---------------+------------------+
3 rows in set (0.00 sec)

Это дает отличные идентификаторы. Но когда я использую ANY_VALUE в запросе 1 выше, он дает тот же результат.

Как запросить отдельные последние строки в MySQL 5.7?


Возможный дубликат

MySQL 5.7 возвращает все столбцы таблицы на основе отдельного столбца

Теги:
mysql-5.7

1 ответ

1
Лучший ответ

Это запрос, который работал у меня -

SELECT m1.*
FROM messages m1 LEFT JOIN messages m2
 ON (m1.name = m2.name AND m1.id < m2.id)
WHERE m2.id IS NULL;

Спасибо @Shadow за ссылку на возможный дубликат.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню