Как написать запрос, чтобы получить все поля записей, отобранных по двум условиям: через GROUP и MAX?
Есть вот такая (см. скрин) примерная таблица.
Хочу из неё вытащить имя игрока, год его самого свежего матча, это просто -
SELECT player, MAX(year)
FROM champ_matches
GROUP BY player
Но я хочу ещё место проведения именно этого свежего матча.
И вот тут затыка.
Чего-то пытаюсь наваять типа
CASE WHEN year = MAX(year) THEH city END
Но максимум чего добился это null
Что добавить в запрос, чтоб получить ещё city (да и id неплохо бы) для последнего матча данного игрока?
Дополнительно:
FIRST_VALUE()
спасибо.
Добился желаемого, написав вот такое:
SELECT DISTINCT `player`, FIRST_VALUE(`year`) OVER (PARTITION BY `player` ORDER BY `year` DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `maxYear`, FIRST_VALUE(`city`) OVER (PARTITION BY `player` ORDER BY `year` DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `mCity` FROM `champ_matches` |
SELECT DISTINCT `player`, FIRST_VALUE(`year`) OVER (PARTITION BY `player` ORDER BY `year` DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `maxYear`, FIRST_VALUE(`city`) OVER (PARTITION BY `player` ORDER BY `year` DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `mCity` FROM `champ_matches`
Выглядит, правда, страшновато)
Выглядит, правда, страшновато
Ну сделайте по-нормальному - ROW_NUMBER() в CTE и WHERE rn=1 снаружи.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для того чтобы написать запрос, чтобы получить все поля записей, отобранных по двум условиям через GROUP и MAX, можно воспользоваться следующим SQL запросом:
SELECT * FROM table_name WHERE (column1, column2) IN (SELECT column1, MAX(column2) FROM table_name GROUP BY column1);
В данном запросе мы выбираем все поля из таблицы table_name, где значения column1 и column2 соответствуют условиям: column2 имеет максимальное значение для каждого уникального значения column1. Мы используем подзапрос, чтобы сгруппировать записи по column1 и выбрать максимальное значение column2 для каждой группы.
Таким образом, данный запрос позволит получить все поля записей, удовлетворяющих двум условиям через GROUP и MAX.