譬如表test内容如下
A      B
1      1.1
1      0.5
2      0.6
1      3.1
2      2.3
3      2.4
2      6.7
1      0.5
1      0.6现在需要按A栏分组查询B栏中的第三大值,譬如A=1时,B中的第三大值为0.6,如果B栏中数据少于三个,第三大值为空
需要的输出结果如下
A      thirdB
1      0.6
2      2.3
3      null我知道查询最大值时可以用以下语句实现
select A, max(B) as thirdB from test group by A;
怎么用尽可能简单的方式查询第三大值?
注意A栏中数据是随机的,没法直接按A栏中的数据用limit查询B中的第三大值

解决方案 »

  1.   

    SELECT DISTINCT a.a,b.b FROM ttqp a LEFT JOIN ( 
    SELECT a.A,a.B FROM ttqp a LEFT JOIN ttqp b ON a.a=b.a AND a.b<=b.b GROUP BY a.A,a.B HAVING COUNT(DISTINCT b.b)=3) b
    ON a.a=b.a2的B也应该为0.6?
      

  2.   

    参考下贴中的多种方法http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
    [征集]分组取最大N条记录方法征集,及散分....
      

  3.   

    select tb3.A,tb4.B
    (
    select *
    from tb
    group by A
    )tb3 left join
    (
    select A,B 
    from tb tb1
    where (select count(*) from tb tb2 where tb1.A=tb2.A and tb1.B>tb2.B)=2
    )tb4 on tb3.A=tb4.A