2016-04-21 3 views
1

Предположив У меня есть таблица «главный»:SQL - Как извлечь минимум всех максимумов

CAT YEAR 
1 2010 
1 2015 
2 2012 
2 2010 

мне удалось извлечь максимум из года в категории с:

SELECT CAT, MAX(YEAR) FROM main GROUP BY CAT 

И I хотели бы получить минимум максимальных значений года, а именно 2012 (третий ряд).

Нечто подобное:

SELECT MIN(SELECT MAX(YEAR) FROM main GROUP BY CAT) 

Может кто-нибудь мне помочь?

+1

Tag ваш вопрос с базой данных, которую вы используете. –

ответ

2
SELECT MIN(yr) 
FROM (SELECT CAT, MAX(YEAR) as yr FROM main GROUP BY CAT) 

Это делается с использованием subquery.

Подзапрос - это запрос, который вложен внутри операторов SELECT, INSERT, UPDATE или DELETE или внутри другого подзапроса. Подзапрос может использоваться везде, где допускается выражение.

4

Используя запрос в качестве подзапроса вы можете выбрать минимальное значение добытых лет из подзапроса в следующем:

select min(year) from -- Select the minimum year from 
(
    SELECT CAT, MAX(YEAR) as year FROM main GROUP BY CAT 
) -- Your query as subquery 
2

Один метод используется подзапрос. Я предпочитаю возвращать одну строку:

select cat, max(year) 
from main 
group by cat 
order by max(year) desc 
fetch first 1 row only; 

Это позволяет получить cat и year в одном запросе.

Примечание: не все базы данных поддерживают стандарт ANSI fetch first 1 row only. Некоторые используют limit, top или даже другие методы.

1

Вы можете попробовать использовать SELECT в SELECT. Это хорошие способы решения этой проблемы.

SELECT min(yr) 
FROM (SELECT cat, max(YEAR) as yr 
FROM main 
GROUP BY cat) 
0

Вы уже на полпути и может выбрать минимальное значение из таблицы, которую вы только что создали (используя его в FROM части):

SELECT MIN(maxYearPerCat) FROM 
    (SELECT CAT, MAX(YEAR) as maxYearPerCatFROM main GROUP BY CAT) as tmpTable 

See this SqlFiddle

0
SELECT MAX(YEAR) FROM main GROUP BY CAT ORDER BY 1 LIMIT 1; 
Смежные вопросы