我的表结构是这样:
主键 业务代码 操作指令码 状态 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;