我现在有这么一个需求,
数据库中原始记录
用户id 积分
1 10
1 20
1 30
1 80
2 10
2 30
3 50
3 60
3 70
3 80但是只显示给用户
用户id 积分
1 10
1 20
1 30
2 10
2 30
3 50
3 60
3 70也就是说原始数据按“用户id”来区分,大与3条的只显示3条(显示哪3条随便),小与3条的就全部显示。
数据库中原始记录
用户id 积分
1 10
1 20
1 30
1 80
2 10
2 30
3 50
3 60
3 70
3 80但是只显示给用户
用户id 积分
1 10
1 20
1 30
2 10
2 30
3 50
3 60
3 70也就是说原始数据按“用户id”来区分,大与3条的只显示3条(显示哪3条随便),小与3条的就全部显示。
要用row_number()
再问高手们一下,要是我还有一个列 type
用户id 积分 type
1 10 1
1 20 1
1 30 2
2 10 2
2 30 3
3 50 3
3 60 4
3 70 4
跟据条件 type 的值来定 取多少列,如 type=1 的 最多 3列,type=1 最多 2列。
这个怎么实现呢?请高手没赐教,小弟新来分不多,请谅解
from (
select tn.用户id,tn.积分,tn.type,row_number() over(partition by tn.用户id order by tn.积分) rn
from tablename tn
)tt
where tt.rn < decode(tt.type,1,3,...);