#mysql
Вопрос:
У меня есть таблица из нескольких строк с категориями и годами:
ID | Категория | год |
---|---|---|
1 | cat1 | 2022 |
2 | cat1 | 2022 |
3 | cat1 | 2021 |
4 | cat2 | 2019 |
5 | cat2 | 2019 |
6 | cat2 | 2018 |
7 | cat2 | 2018 |
Я пытаюсь создать запрос, который получает только строки с последним годом для каждой категории, в результате чего:
ID | Категория | год |
---|---|---|
1 | cat1 | 2022 |
2 | cat1 | 2022 |
4 | cat2 | 2019 |
5 | cat2 | 2019 |
Я пробовал использовать GROUP BY, но получаю только одну строку для каждого года и категории:
SELECT
ANY_VALUE(`id`) AS `id`,
ANY_VALUE(`category`) AS `category`,
MAX(`year`) AS `year`
FROM `my_table`
GROUP BY `category`,`year`
ORDER BY `year` DESC, `category`
Любая помощь будет очень признательна!
Комментарии:
1.
latest year for each category
почемуcat1
иcat2
появляются дважды?2. @user3783243, потому
ID
что s разные
Ответ №1:
Воспроизвести следующий:
SELECT
ANY_VALUE(`my_table`.`id`) AS `id`,
ANY_VALUE(`my_table`.`category`) AS `category`,
ANY_VALUE(`my_table`.`year`) AS `year`
FROM `my_table`, (SELECT ANY_VALUE(`category`) AS `category`, MAX(`year`) AS `year` FROM `my_table` GROUP BY `category`) AS `my_table2`
WHERE
`my_table`.`year` = `my_table2`.`year` AND
`my_table`.`category` = `my_table2`.`category`
ORDER BY `my_table`.`year` DESC, `my_table`.`category`
Комментарии:
1. Спасибо! Это дало мне именно то, что мне было нужно, и запрос был очень эффективным. Ваше здоровье!
Ответ №2:
вот запрос MySQL для этого:
SELECT * FROM TAB T1
WHERE YEAR >= ALL (SELECT YEAR FROM TAB T2 WHERE T2.CATEGORY = T1.CATEGORY);
Ответ №3:
Попробуйте выполнить следующий запрос с INNER JOIN
:
SELECT DISTINCT(t1.id), t1.category, t1.year
FROM my_table t1
INNER JOIN my_table t2
ON t1.category = t2.category
WHERE t1.year > t2.year;
Этот запрос более эффективен, так как он не включает в себя никаких подзапросов, агрегатных функций или группировки.
Проверьте dbfiddle
Комментарии:
1. У этого есть одна проблема .
2. Мой запрос действителен для заданных данных. В приведенных данных все категории повторяются.