SQL - 如何提取所有最大值的最小值

时间:2016-04-21 13:56:51

标签: sql

假设我有一张桌子" main":

CAT  YEAR 
 1   2010
 1   2015
 2   2012
 2   2010

我成功通过以下类别提取了最大年份:

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

我想得到最大年份值的最小值,即2012年(第三行)。

类似的东西:

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

有人可以帮助我吗?

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

这是使用subquery完成的。

  

子查询是嵌套在SELECT,INSERT,UPDATE或DELETE语句内或另一个子查询内的查询。子查询可以在允许表达式的任何地方使用。

答案 2 :(得分:2)

一种方法使用子查询。我更喜欢退回一行:

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

这样,您就可以在一次查询中获得catyear

注意:并非所有数据库都支持ANSI标准fetch first 1 row only。有些人使用limittop甚至其他方法。

答案 3 :(得分:1)

您可以尝试在SELECT中使用SELECT。这是解决这类问题的好方法。

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

答案 4 :(得分:0)

您已经在那里,可以从刚创建的表中选择最小值(在combined = pd.concat([df1, df2], axis=1) combined.sort_index(axis=1, inplace=True) combined Out[13]: bar foo \ D E F G H A B 0 0.915879 0.712345 0.460795 0.529782 0.161578 0.803505 0.133896 1 0.234319 0.317113 0.477687 0.525108 0.495104 0.107596 0.374732 2 0.149397 0.244950 0.866735 0.501562 0.758321 0.508689 0.635703 3 0.330018 0.204695 0.598899 0.522993 0.306496 0.936768 0.638874 C 0 0.614592 1 0.824297 2 0.482161 3 0.792035 部分中使用它):

FROM

See this SqlFiddle

答案 5 :(得分:0)

SELECT MAX(YEAR) FROM main GROUP BY CAT ORDER BY 1 LIMIT 1;