2015-09-04 121 views
2

我有以下Oracle数据库。员工表使用order by子句以降序排列。表格列仅仅是解释场景的例子。Oracle:如何仅更新oracle数据库中的最新行

S.no Time_to_complete Project  employee_id  
3  23     project3  xx 
2  22     project2  xx 
1  34     project1  xx 

我需要在数据库即

S.no Time_to_complete Project employee_id 
3  25(updated)   project3  xx 

注意只更新的最新记录:本次更新是一个功能的一部分,我只能访问EMPLOYEE_ID

如何更新,只有Oracle中最新的一行?

update employee set time_to_complete=25 where employee_id=xx and rownum=1 order by s.no desc 

回报

S.no time_to_complete Project employee_id 
1  25(updated)   project1  xx 
+1

什么是你的表的主键?是'独一无二'吗? – sstan

+2

“最新”是什么意思?以你为例,我假定max s.no,但“latest”可能意味着“最后一个记录更新”,可能是其中的任何一个,没有updated_time列,你不知道它是哪一个。 –

+0

对不起,我忘了。 S.no是主键,每当输入新数据时,它都会自动递增。 – user2332505

回答

1
update employee e 
    set e.time_to_complete = 25 
where e.s_no = (select max(e2.s_no) from employee e2 where e2.employee_id = xx) 
+0

谢谢...它的工作良好 – user2332505

+0

可能在12c中使用“按s_no desc排序”和限制条款,可以实现更高效的解决方案。不能测试它。 –