SQL поиск максимального значения столбца, в котором другой столбец получил максимальное, но повторяемое значение - PullRequest
2 голосов
/ 13 февраля 2020

У меня есть следующая таблица:

id  year    month
1   2019    9
2   2019    10
3   2019    11
4   2019    12
5   2020    1
6   2020    2
7   2020    3
8   2020    4

Мне нужно выбрать максимальное значение месяца столбца, но только там, где год получил максимальное значение. В этом случае мне нужно выбрать строку

id  max_year    max_month
8   2020        4

Я пытался сделать это с этим

SELECT m.id, m.max_year, MAX(m.month) AS max_month FROM (SELECT id, month, MAX(year) AS max_year FROM tbl_months GROUP BY id) AS m GROUP BY m.id

К сожалению, я получаю

id  max_year    max_month
5   2020    1
6   2020    2
7   2020    3
8   2020    4

Любые подсказки, почему? Есть ли другой способ сделать его проще и чище?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 13 февраля 2020

Используйте order by и limit;

select t.*
from t
order by year desc, month desc
limit 1;
1 голос
/ 13 февраля 2020

с cte as (выберите * из temp, где year = (выберите max (год) из temp)), cte2 as (выберите * из temp, где month = (выберите max (month) из temp)) выберите * из cte2

0 голосов
/ 13 февраля 2020

Как еще один вариант

select t1.* 
from t t1
where m = (select max(t2.m) from t t2 where y = (select max(t3.y) from t t3))

Этот способ называется подзапросом. Я не уверен, что это быстрее, чем опция order by / limit, но может зависеть от индекса.

...