2 luoyg1004 luoyg1004 于 2014.07.23 21:04 提问

跪求:oracle如何在数据分组后更新(update)?求大神指导啊~~~万分感谢

如题:org_info 表内容如下:
ID NAME TEL ADDR OP_TYPE OCCUR_DATE
1001 aaa 888888 ppppppp 2014-07-23
1001 aaa 999999 ppppppp 2011-03-19
1002 bbb 666666 yyyyyyy 2014-09-15
1002 ipow 221 fghfghfh 2009-07-08
1002 ipow 221 iyyiwqwe 2006-02-24
1002 bbb 666666 yyyyyyy 2001-05-12

update (select row_number() over(partition by id order by occur_date ASC) RN,
oi.* from org_info oi) aa
set aa.op_type = 1 where aa.RN = 1
数据库报错:
ORA-01732: 此视图的数据操纵操作非法

请问这为什么错?如果不能这样写,那么用什么方式还能实现此功能呢?谢谢~~~~
(希望实现按照ID分组,取出日期最小的那条记录,将他字段OP_TYPE更新为1,求指导啊~~~)

2个回答

luoyg1004
luoyg1004   2014.07.26 14:02
已采纳

update org_info set op_type = 1 where rowid in (
select rid
from (select rowid rid,
row_number() over(partition by id order by occur_date ASC) RN
from org_info oi)
where rn = 1
)

sloder
sloder   2016.05.18 09:07

如果是关联更新怎么处理? @luoyg1004
当然效率要高

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Oracle数据库之——分组查询,子查询及添加,更新,删除
分组查询写的顺序:select...from...where... group by...having...order by...执行顺序:from...where...group by.... having ... select ...order by ....实例练习:-- existes : 用它来找寻满足一个条件的信息 -- 找寻多表中存在关联关系或不存在关联关系的数据 --查询部门当中没
mysql分别对分一组的数据进行更新
UPDATE `trans_detail-2013-12_` a, ( SELECT MIN(EFFECTIVE_TIME) minTime,TRANS_CODE transCode FROM  `trans_detail-2013-12_`  WHERE TRANS_CODE in( 'QTCK_1312_1_QTRK_1312_1', 'QTCK_1312_2_QTRK_1312_2
SQL 分组数据进行批量更新
SQL 对分组数据进行批量更新
用Oracle写分组计算数量后再合计,并得出百分数
通过报表的形式展示各部门行为违章自查问题数量、公司检查问题数量、自我管理力度(自查比率%)。这就要求按照部门进行计算自查问题数量和公司检查问题数量。最后总计 用的是grouping和group by rollup 则Oracle语句是: select decode(grouping(zrbm),1,'合计',zrbm) zrbm,sum(dwzcwtsl) dwzcwtsl,sum(gsjc
S7-300 GRAPHzuoye
S7-300 GRAPH作业跪求大神指导
Oracle学习总结--数据更新和事务控制
sql:Structured  Query  Languanage  结构化查询语言  作用:操作数据库 sql组成: DCL(数据控制语言):用来控制存取许可,存取权限等;----grant、revoke等 DDL(数据定义语言):用来建数据库,数据库对象和定义其列;--create table,drop table等 DML(数据操作语言):查宿、插入、删除、和修改数据库中的数据;-
oracle 先分组后获取每组最大值
用户每次登陆都会向表中插入一个登录日期,现在需要获取最近N位登录的用户及登陆时间, 因此现根据用户进行分组,然后在求出每组中最大的日期SELECT
oracle在原来自段值得基础上追加字符串
--在原来数据的基础上追加字符串-- update table t set t.name = t.name || ',103.44.88.3' where t.id='160040000001'
oracle数据update后怎么恢复到以前的数据
为了方便大家自己的解决办法: 1、select * from V$SQL where SQL_TEXT like '%update MAP_OPTCBL_POINT_70 set shape%'--查出你需要恢复的时间点 2、 create table t_table_recove --新的表 as select * from MAP_OPTCBL_POINT_70 --你误操作的表
取出分组之后每组前10条数据 oracle
--取出x || '_' || y 分组之后每组前10条数据  select * from (        select  x,y,sj,ddbz,             row_number() over (partition by x || '_' || y order by sj desc) rn                 from test           wher