我的表结构是这样:
主键 业务代码          操作指令码    状态       EC代码     订购关系的服务接入号    创建时间
ID   SERVICECODE  OPRCODE    STATE  ECCODE  ACCESSNUMBER          CREATETIME我现在需要查询SERVICECODE='5001',OPRCODE='02',STATE=2的所有记录,但是如果查出来的记录的SERVICECODE、ECCODE和ACCESSNUMBER相同,则认为这是同一个业务多次提交,我只要这些记录中CREATETIME最新的一条就可以了,比如说:
select t.ID,t.ECCODE,t.ACCESSNUMBER,t.SERVICECODE,t.CREATETIME from ecorderins t where t.servicecode='5001' and t.oprcode='02' and t.state=2
出来的结果是:ID      ECCODE  ACCESSNUMBER   SERVICECODE    CREATETIME     
1       4001 7001        5001       20130805100835
2    4001 7001        5001       20130805101033
3    4001 7001        5001       20130805112805
4    4004 7004        5001       20130804100835
6    4001 7006        5001       20130805170102
7    4007 7007        5001       20130802100835
9    4009 7009        5001       20130805084531其实我需要的是ID为3、4、6、7、9的数据,id为1、2、3的数据视作重复数据,取了最新的3
不知道SQL应该怎么写求指教SQL重复数据

解决方案 »

  1.   

    select t.* 
    from (select ID,ECCODE,ACCESSNUMBER,SERVICECODE,CREATETIME,ruw_number()over(partition by servicecode,oprcode,state order by CREATETIME desc)rn
            from ecorderins)t 
    where t.rn=1;
      

  2.   

    额。。这个我看不太懂,提示ruw_number表示标示符无效- -
    我后来在sql后面继续加条件and t.CREATETIME=(select max(CREATETIME) from ecorderins where ECCODE=t.ECCODE  and ACCESSNUMBER=t.ACCESSNUMBER and SERVICECODE=t.SERVICECODE)
    貌似是成功了,我再试试
      

  3.   

    额。。这个我看不太懂,提示ruw_number表示标示符无效- -
    我后来在sql后面继续加条件and t.CREATETIME=(select max(CREATETIME) from ecorderins where ECCODE=t.ECCODE  and ACCESSNUMBER=t.ACCESSNUMBER and SERVICECODE=t.SERVICECODE)
    貌似是成功了,我再试试

    不好意思,打错了,是row_number
    select t.* 
    from (select ID,ECCODE,ACCESSNUMBER,SERVICECODE,CREATETIME,row_number()over(partition by servicecode,oprcode,state order by CREATETIME desc)rn
            from ecorderins)t 
    where t.rn=1