oracle或mysql获取分组后每组的前三条数据

mysql :

select a.* 
from
(
select t1.*,(select count(*)+1 from 表 where 分组字段=t1.分组字段 and 排序字段<t1.排序字段) as group_id
from 表 t1
) a
where a.group_id<=3

oracle:

SELECT t.*         
   FROM (SELECT ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段 DESC) rn,         
         b.*         
         FROM 表 b) t         
  WHERE t.rn <= 3  ;

这种方式唯一不足的地方就是会多一个伪列,需要手动去选择列,仅供参考

猜你喜欢

转载自blog.csdn.net/Alex_81D/article/details/104901075