1

Oracle 11g R1 データベースを使用しています。私が達成しようとしていることを手伝ってください。

Table 1
-------

ID  Name    Status
--  ----    ------
1   John    0
2   Chris   0
3   Joel    0
4   Mike    0
5   Henry   0


Table 2
-------

ID  Status  ResponseDate
--  ------  -------------
1   0       1-Jan-2013
1   1       31-Jan-2013
1   2       3-Feb-2013
1   6       19-Jan-2013
2   6       3-Mar-2013
2   2       1-Mar-2013
2   1       4-Mar-2013
2   0       2-Mar-2013
3   0       3-Feb-2013
3   1       2-Feb-2013
3   2       1-Feb-2013
4   2       4-Apr-2013
4   1       6-Apr-2013
4   0       1-Apr-2013
5   1       31-Mar-2013
5   6       4-Apr-2013
5   3       10-Jan-2013

Table1.statusから返された最新の応答に基づいて更新したいと思いIDます。したがって、ステータスTable1は最終的に次のように更新されます。

ID  Name         Status
--  ----        ------
1   John        2
2   Chris       1
3   Joel        0
4   Mike        1
5   Henry       6
4

3 に答える 3

1
update table1 t1 
   set status = (
     select max(status) keep (dense_rank last order by responsedate)  
       from table2 t2 
      where t2.id = t1.id
   );
于 2013-09-10T06:45:37.940 に答える
0
update table1 t1
set status = 
(
  select status 
  from table2  
  where id = t1.id and responseDate = 
  (
        select max(responseDate) 
        from table2 
        where id = t1.id
  )
)
于 2013-09-10T06:40:47.150 に答える