日期:2014-05-19  浏览次数:20630 次

取到排序后(从大到小)第二个数据
在一个排序后的表中如何取到第二个数据,如下:
tb(col1   char(2),col2   int)
col1             col2
a1                     15
a1                     14
a1                     13
a1                     11
a1                       9
a2                       22
a2                       20
a2                       10
a2                       5
...
想通过sql得到
col1               col2
a1                     14
a2                     20
...
如果想得到第三.....请问如何得到?

------解决方案--------------------
select col1,col2
from
(
select col1,col2,
tmp_id=(select count(*) from tb where col1=a.col1 and col2> =a.col2)
from tb a
) T
where tmp_id=2
------解决方案--------------------
create table tb(col1 char(2),col2 int)
insert into tb
select 'a1 ',15
union all select 'a1 ',14
union all select 'a1 ',13
union all select 'a1 ',11
union all select 'a1 ', 9
union all select 'a2 ', 22
union all select 'a2 ', 20
union all select 'a2 ', 10
union all select 'a2 ', 5

select * from tb a
where col2 in (select top 1 col2 from (select top 2 col2 from tb b where a.col1=b.col1 order by col2 desc)t order by col2)
/*
col1 col2
---- -----------
a1 14
a2 20

(所影响的行数为 2 行)
*/
------解决方案--------------------
select * from tb a
where col2 in (select top 1 col2 from (select distinct top 2 col2 from tb b where a.col1=b.col1 order by col2 desc)t order by col2)