如表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条就显示

解决方案 »

  1.   

    用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.报名时间
      

  2.   

    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
    )
    )