如表A
学科,报名时间,人员姓名
数学 1月 人员a
数学 2月 人员b
语文 3月 人员c
数学 1月 人员d
数学 1月 人员e
语文 3月 人员f
数学 2月 人员g
英语....
化学....
.......
求按照 学科和报名时间排序,
如果学科和报名时间都一样的数据超过3条就显示出相关字段
学科
1 数学 1月 人员a
2 数学 1月 人员d
3 数学 1月 人员e
我只会用
select row_number() over(partition by 学科,报名时间 ordre by 报名时间) rn
,人员姓名,学科,报名时间
from a
但是不会如何把不要的记录不显示。我是想
学科和报名时间都一样的数据超过3条就显示
------解决方案--------------------
用Group by having不行吗?呵呵,刚学Oracle不久.试试这个行不行
create table testa(学科 varchar2(10),报名时间 varchar2(10),人员姓名 varchar2(10))
select testa.学科,testa.报名时间,testa.人员姓名 from testa
join (select 学科,报名时间 from testa group by 学科,报名时间 having count(*) > = 3) temp
on testa.学科 = temp.学科 and testa.报名时间 = temp.报名时间
------解决方案--------------------
select * from A t
where (select count(0) from A v where v.subject=t.subject and v.date=t.date)> =3
或者樓主的方法
select * from A
where (subject,date) in
(select 学科,报名时间 from
(
select row_number() over(partition by 学科,报名时间 ordre by 报名时间) rn
,人员姓名,学科,报名时间
from a where rn> =3
)
)