一千萬個為什麽

搜索

第二個最大值和最小值

給定一個具有多行int字段和相同標識符的表,是否可以從表中返回第二個最大值和第二個最小值。

一張桌子由

ID      |   number
------------------------
1       |     10
1       |     11
1       |     13
1       |     14
1       |     15
1       |     16

最終結果將是

ID      |   nMin    |   nMax
--------------------------------
1       |     11    |    15

最佳答案

您可以使用 row_number 為每個ID分配排名。然後你可以按ID分組並選擇你所追求的排名行。以下示例選擇第二最低和第三最高:

select  id
,       max(case when rnAsc = 2 then number end) as SecondLowest
,       max(case when rnDesc = 3 then number end) as ThirdHighest
from    (
        select  ID
        ,       row_number() over (partition by ID order by number) as rnAsc
        ,       row_number() over (partition by ID order by number desc) as rnDesc
        ) as SubQueryAlias
group by
        id

max 只是挑出一個非空值;您可以用 min 或甚至 avg 替換它,它不會影響結果。

轉載註明原文: 第二個最大值和最小值