表test里有单位A B C ,每个单位都有多条记录..取每个单位的前3条记录,怎么怎么取?
test表:
字段一
A   
A
A
A
A
B
B
B
B
B
B
B
B
C
C
C希望大家能帮我解决这个难题,小弟感激不尽!!

解决方案 »

  1.   


    select a.*
    from( 
      select t.*,row_number() over(partition by t.depart_name order by t.depart_name) num
      from test t) a
    where a.num < 4
      

  2.   


    select a.*
    from( 
      select t.*,rank() over(partition by t.depart_name order by t.depart_name) num
      from test t) a
    where a.num < 4
      

  3.   

    建议楼主查看一下rank() over的用法
      

  4.   

    select t1.*from( 
      select t.*,row_number() over(partition by t.depart_name order by t.depart_name) rownum
      from test t) a
    where t1.rownum <=3
      

  5.   

    rank()和row_number()稍有不同的。在有相同数据的时候不同,这个需要注意。
      

  6.   

    恩,用rank貌似确实不行,如果相同的记录太多就会造成误差还是用row_number吧
      

  7.   

    分析函数over (partition by)正解
      

  8.   

    学习
    还是没明白row_number()和rank()的区别....
      

  9.   

    rownum 1
           2
           3
    rank   1
           2
           2
           4
    dense_rank 1
               2
               2
               3 
    可以写一个 试试啊