Как написать запрос, чтобы получить все поля записей, отобранных по двум условиям: через GROUP и MAX?

Ссылка скопирована
1 ответ

Есть вот такая (см. скрин) примерная таблица.

Как написать запрос, чтобы получить все поля записей, отобранных по двум условиям: через GROUP и MAX?

Хочу из неё вытащить имя игрока, год его самого свежего матча, это просто -
SELECT player, MAX(year)
FROM champ_matches
GROUP BY player

Но я хочу ещё место проведения именно этого свежего матча.
И вот тут затыка.
Чего-то пытаюсь наваять типа
CASE WHEN year = MAX(year) THEH city END
Но максимум чего добился это null

Как написать запрос, чтобы получить все поля записей, отобранных по двум условиям: через GROUP и MAX?

Что добавить в запрос, чтоб получить ещё city (да и id неплохо бы) для последнего матча данного игрока?

Дополнительно:

FIRST_VALUE()

  • Akina,
    спасибо.
    Добился желаемого, написав вот такое:
    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`

    Выглядит, правда, страшновато)

  • Олег Откидач, FIRST_VALUE() не требует спецификации окна, так что RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING можно смело удалить. А спецификации окон лучше объединить.

    Выглядит, правда, страшновато

    Ну сделайте по-нормальному - ROW_NUMBER() в CTE и WHERE rn=1 снаружи.

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Андрей PHP Ответ

    Для того чтобы написать запрос, чтобы получить все поля записей, отобранных по двум условиям через GROUP и MAX, можно воспользоваться следующим SQL запросом:

    SELECT *
    FROM table_name
    WHERE (column1, column2) IN
        (SELECT column1, MAX(column2)
         FROM table_name
         GROUP BY column1);

    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.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно