首页新闻找找看学习计划

sql 查询每个gcid的前3个

0
[已解决问题] 解决于 2013-08-06 13:31
gid gcname gcid
1 10元话费 2
2 10元话费 2
3 10元话费 2
4 10元话费 2
5 10元话费 2
6 10元话费 2
7 10元话费 2
8 20元话费 3
9 20元话费 3
10 20元话费 3
11 20元话费 3
12 20元话费 3
13 20元话费 3
14 20元话费 3
15 50元话费 4
16 50元话费 4
17 50元话费 4
18 50元话费 4
19 50元话费 4
sql
新麦穗的主页 新麦穗 | 初学一级 | 园豆:82
提问于:2013-07-16 16:00
< >
分享
最佳答案
0

分组排序的问题啊:

select * from(
select gcid,name, row_number() over (partition by gcid
order by name desc) as rowno
from tel) A
where a.rowno<=3

奖励园豆:5
kylin.chen | 小虾三级 |园豆:983 | 2013-07-16 18:30

这个兼容性很差,而且性能不好,只有新的数据库支持。最好的办法是写存储过程,用临时表。

kylin.chen | 园豆:983 (小虾三级) | 2013-07-16 18:31
其他回答(2)
0
select * from table a
where 2>(select count(id) from table  b where a.gid<b.gid and a.gcid=b.gcid)
Macbeth | 园豆:126 (初学一级) | 2013-07-17 09:20

这个效率也不高,不过也是一种办法。

支持(0) 反对(0) kylin.chen | 园豆:983 (小虾三级) | 2013-07-19 21:20
0

select * from (select gid,gcname,gcid,case when row_number() over(partition by gcid order by gcid asc) = 1 then 1
                            when row_number() over(partition by gcid order by gcid asc) = 2 then 2
                            when row_number() over(partition by gcid order by gcid asc) = 3 then 3
                            else 4 end as rnt
from tableA) as t
where t.rnt <= 3

Eddiew | 园豆:286 (菜鸟二级) | 2013-07-17 10:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册