删除一个表中的若干记录,条件是:
如果该表中field1列的值的前8位相同,那么将后两位中较小的纪录删除,
举个例子:
如果field1的值有AAAAAAAA01,AAAAAAAA02,AAAAAAAA03,
那么将AAAAAAAA01,AAAAAAAA02对应的纪录删除掉,只剩下AAAAAAAA03对应的纪录。谢谢!
如果该表中field1列的值的前8位相同,那么将后两位中较小的纪录删除,
举个例子:
如果field1的值有AAAAAAAA01,AAAAAAAA02,AAAAAAAA03,
那么将AAAAAAAA01,AAAAAAAA02对应的纪录删除掉,只剩下AAAAAAAA03对应的纪录。谢谢!
解决方案 »
- 如何取上个月的今天的前一天的问题,有好的办法么,工作中遇到的,请大家帮忙(请想好在回答,有好种情况比如闰月之类)?
- oracle外连接 (+)和left join 有效率区别吗
- ORACLE 存储过程授权
- 求一sql,不算难,但小弟写不出来
- 电信难题,oracle字符集的显示!!!!!!!!
- 小弟求教一个拆分字符串的方法
- 新手问题,还望大家踊跃帮忙解决
- 求教,我装了ORACLE9I了啊。但是找不到PL/SQL的帮助啊。
- 求oracle sql
- Oracle 18c小问
- sql中的函数MAX只能对一整列求最大值.我现在需要对某一条记录的多个字段的值进行比较,单用sql语句可以实现吗?
- 如何取某列中多行相同值中的一行数据?
where field1 not in (select max(field1)over(partition by substr(field1,1,8))
from table
)
---------- --------------------
1 AAAAAAAA01
2 AAAAAAAA02
3 AAAAAAAA03
4 AAAAAAAB01
5 AAAAAAAC01
6 AAAAAAAC026 rows selectedSQL>
SQL> DELETE FROM a WHERE ROWID NOT IN
2 (SELECT MAX(ROWID) FROM a GROUP BY substr(field1, 1, 8));3 rows deletedSQL> select * from a; ID FIELD1
---------- --------------------
3 AAAAAAAA03
4 AAAAAAAB01
6 AAAAAAAC02
在SELECT里面都有些重复的东西,我知道GROUP BY也能实现.
where field1 not in(
SELECT substr(field1, 1, 8)||MAX(to_number(field1, 9))
FROM a GROUP BY substr(field1, 1, 8)
)
where exists(select 1 from TABLENAME t1
where t1.field1 like substrb(t.field1,1,8)||'%'
and t1.field1>t.field1);
(SELECT MAX(ROWID) FROM a GROUP BY substr(field1, 1, 8));