日期:2014-05-17  浏览次数:20788 次

初学者求教一个关于查询的问题,如果有重复结果就取最新的怎么写sql
我的表结构是这样:
主键 业务代码          操作指令码    状态       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 重复数据

------解决方案--------------------
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;