SQL 分析函数over partition 分组数据后取前N条

将 ATable 表,如下
A   B    C
aa  sx  1000
aa  zh  900
bb  jj  1100
bb  zh  500
bb  gg  400
bb  wd  300
bb  sh  150
cc  sh  1500

转换为BTable表,如下
A    B     C
aa  sx  1000
aa  zh  900
bb  jj  1100
bb  zh  500
bb  gg  400
cc  sh  1500

即不满三条的数据,全部取出,超过3条的数据,取三条,后面滤去

 

select t.* from
   (
select Atable.*,row_number() over(partition by A order by C desc) rn from Atable) t
where rn<=3

posted on 2009-12-15 17:25  Theo  阅读(683)  评论(0编辑  收藏  举报