oracle删除数据只保留时间最早和最新的数据

以学生表为例

insert into Student01 values('01' , '赵雷' , to_date('1990-01-01','yyyy-mm-dd'), '男'); 
insert into Student01 values('02' , '钱电' , to_date('1990-12-21','yyyy-mm-dd'), '男'); 
insert into Student01 values('03' , '孙风' , to_date('1990-12-20','yyyy-mm-dd'), '男'); 
insert into Student01 values('04' , '李云' , to_date('1990-12-06','yyyy-mm-dd'), '男'); 
insert into Student01 values('05' , '周梅' , to_date('1991-12-01','yyyy-mm-dd'), '女'); 
insert into Student01 values('06' , '吴兰' , to_date('1992-01-01','yyyy-mm-dd'), '女'); 
insert into Student01 values('07' , '郑竹' , to_date('1989-01-01','yyyy-mm-dd'), '女'); 
insert into Student01 values('09' , '张三' , to_date('2017-12-20','yyyy-mm-dd'), '女'); 
insert into Student01 values('10' , '李四' , to_date('2017-12-25','yyyy-mm-dd'), '女'); 
insert into Student01 values('11' , '李四' , to_date('2012-06-06','yyyy-mm-dd'), '女'); 
insert into Student01 values('12' , '赵六' , to_date('2013-06-13','yyyy-mm-dd'), '女'); 
insert into Student01 values('13' , '孙七' , to_date('2014-06-01','yyyy-mm-dd'), '女'); 

使用开窗函数对时间字段进行排序

select row_number()over( order by Sage desc) rn,t.* from student01 t
union all
select row_number()over( order by Sage asc) ,t1.* from student01 t1

 最后再加上delete就可以啦


delete from student01 where SId not in(
select SID FROM(
select row_number()over( order by Sage desc) rn,t.* from student01 t
union all
select row_number()over( order by Sage asc) ,t1.* from student01 t1
)
WHERE RN =1 
)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值