Позвольте мне объяснить вам мою проблему на примере:
Учитывая пару member_id, мне нужно выяснить, к какой команде они принадлежат:
SELECT
team_name, member_id, last_updated
FROM
(SELECT 'red team' AS team_name, su.*
FROM
'red_table' su
UNION SELECT
'blue team' AS team_name, mu.*
FROM
'blue_table' mu
UNION SELECT
'green team' AS team_name, mh.*
FROM
'green_table' mh
UNION SELECT
'black team' AS team_name cm.*
FROM 'black_table' cm) a
WHERE
member_id IN ('123456','987654', '666666')
Работает отлично:
team_name | member_id | last_updated
blue_team | 987654 | 2020-03-11
green_team | 123456 | 2020-04-08
black_team | 123456 | 2018-08-05
Однако мои проблемы начались, когда мне нужно было удалить более старую информацию, оставив только самую последнюю, как показано:
team_name | member_id | last_updated
blue_team | 987654 | 2020-03-11
green_team | 123456 | 2020-04-08
Для этого я добавил следующие строки:
SELECT
team_name, member_id,
MAX(last_updated) AS most_recent
FROM (
SELECT
team_name, member_id, last_updated
FROM
(SELECT 'red team' AS team_name, su.*
FROM
'red_table' su
UNION SELECT
'blue team' AS team_name, mu.*
FROM
'blue_table' mu
UNION SELECT
'green team' AS team_name, mh.*
FROM
'green_table' mh
UNION SELECT
'black team' AS team_name cm.*
FROM 'black_table' cm) a
WHERE
member_id IN ('123456','987654', '666666')
) as test
GROUP BY team_name
Всякий раз, когда я пытаюсь использовать код, я получаю следующую ошибку:
SQL Error [1055] [42000]: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.member_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
После поиска здесь на SO я нашел следующее решение
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
но не применимо к моему делу, потому что у меня нет административного контроля над базами данных.
Пожалуйста, не могли бы вы показать мне, что я делаю неправильно?
Большое спасибо