Нарушение прав доступа MySql не относится к группе с ГОДОМ МЕСЯЦ и МАКС. - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть такая структура данных:

Table One
______________
| id  | name |
|------------|
| 1   | bob  |
| 2   | jane |
--------------

Table Two
_________________________________
| id  | table_1_id | date       |
|-------------------------------|
| 1   | 1          | 2000-01-01 |
| 2   | 1          | 2000-01-31 |
| 4   | 1          | 2000-02-28 |
| 5   | 1          | 2000-03-03 |
| 6   | 2          | 2000-01-03 |
| 7   | 2          | 2000-01-05 |
---------------------------------

Я пытаюсь вернуть только самые высокие (самые последние) даты из таблицы 2, которые соответствуют идентификатору пользовательского боба из таблицы 1.

Например, в приведенном выше примере я хочу вернуть это из моего запроса

2000-01-31

2000-02-28

2000-03-03

Сейчас я пытаюсь

SELECT MAX(date)
FROM table_2
INNER JOIN table_1 ON table_1.id = table_2.table_1_id
WHERE table_1.name = "bob"
GROUP BY YEAR(date), MONTH(date)
ORDER BY date DESC

Кажется, это работает для меня локально, но в работе это не получается, потому что ONLY_FULL_GROUP_BY включен.

Я не знаюЯ не хочу отключать ONLY_FULL_GROUP_BY, так как я бы лучше узнал, как правильно построить этот запрос, но я не могу понять, как правильно обращаться с YEAR / MONTH и MAX без получения ошибки «not in GROUP BY»..

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 27 ноября 2018

ORDER BY должно быть либо в агрегированном выражении, либо в выражении, определенном в GROUP BY.

Так что нам нужно отсортировать по максимальной дате (выбранное вами значение) вместо даты.В MySQL мы можем определить псевдоним и использовать псевдоним в ORDER BY условии

SELECT MAX(date) as max_date
FROM table_2
INNER JOIN table_1 ON table_1.id = table_2.table_1_id
WHERE table_1.name = 'bob'
GROUP BY YEAR(date), MONTH(date)
ORDER BY max_date DESC

Также не используйте двойные кавычки, но стандартные одинарные кавычки для строковых литералов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...