当前位置: 代码迷 >> Oracle管理 >> oracle sql语句,
  详细解决方案

oracle sql语句,

热度:75   发布时间:2016-04-24 05:32:15.0
oracle 请教各位sql语句,,,,

表table,以下是表里的数据
member_id user_id
0001 11
0001 12
0001 13
0001 14
0002 21
0002 22
0002 23
0002 11
0004 41
0004 42
0004 43
0004 44
0004 22
0005 51

我现在想要查询出每个member_id只显示前两行数据

查询后的结果
member_id user_id
0001 11
0001 12
0002 21
0002 22
0004 41
0004 42
0005 51

请教下各位sql语句,,谢谢!!!!!

------解决方案--------------------
SQL code
with a as(select '0001' as member_id, '11' as user_id from dual union allselect '0001' as member_id, '12' as user_id from dual union allselect '0001' as member_id, '13' as user_id from dual union allselect '0001' as member_id, '14' as user_id from dual union allselect '0002' as member_id, '21' as user_id from dual union allselect '0002' as member_id, '22' as user_id from dual union allselect '0002' as member_id, '23' as user_id from dual union allselect '0002' as member_id, '11' as user_id from dual union allselect '0004' as member_id, '41' as user_id from dual union allselect '0004' as member_id, '42' as user_id from dual union allselect '0004' as member_id, '43' as user_id from dual union allselect '0004' as member_id, '44' as user_id from dual union allselect '0004' as member_id, '22' as user_id from dual union allselect '0005' as member_id, '51' as user_id from dual)select sub.member_id, sub.user_id from(select member_id, user_id, row_number() over (partition by member_id order by member_id, user_id) cnt from a) subwhere sub.cnt < 3;
------解决方案--------------------
哎呀,一样的啊。。。
你改成你自己的表名就完了呗:
SQL code
select sub.member_id, sub.user_id from(select member_id, user_id, row_number() over (partition by member_id order by member_id, user_id) cnt from table) subwhere sub.cnt < 3;
------解决方案--------------------
select memberid,userid from (select memberid,userid,dense_rank() over(partition by memberid order by userid) denserank from danger) where denserank<3

不需要那么复杂,前几天刚研究oracle函数,只需用分析函数就OK了,我博文有详细介绍。
------解决方案--------------------
也就是你需要显示拥有两个以上member_id的user_id是吧。

select da.memberid,da.userid from (select memberid, userid
from (select memberid,
userid,
dense_rank() over(partition by userid order by memberid) denserank
from danger d) where denserank<3) da,
(select userid, max(denserank) m
from (select memberid,
userid,
dense_rank() over(partition by userid order by memberid) denserank
from danger) group by userid) ma
 where da.userid = ma.userid
and ma.m > 1

语句复杂了点。。
应该有个更好的方法。。
  相关解决方案