Mar*_*uth 5 sql sql-server-2008
给定一个具有多行int字段和相同标识符的表,是否可以从表中返回第二个最大值和第二个最小值.
一张桌子由
ID | number
------------------------
1 | 10
1 | 11
1 | 13
1 | 14
1 | 15
1 | 16
Run Code Online (Sandbox Code Playgroud)
最终结果将是
ID | nMin | nMax
--------------------------------
1 | 11 | 15
Run Code Online (Sandbox Code Playgroud)
您可以使用row_number每个ID分配排名.然后你可以group by 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
Run Code Online (Sandbox Code Playgroud)
的max只是挑选出一个非空值; 你可以用它来代替,min甚至avg不会影响结果.
| 归档时间: |
|
| 查看次数: |
12133 次 |
| 最近记录: |