表Act 
Act_id A B C
01 7 1 3
02 2 1 2
03 4 2 1表pro_act
是inset into pro_act select A_sequence.nextval,act_id, act.a,act.b from act where act.b=1   插入多次得到的.
Pro_act_ID ACT_ID A B
04 01 7 1
05 02 2 1
06 01 7 1
07 02 2 1
表rea
Rea.Act_id对应act.act_id,但是每个数都是重复过的. 
Rea_id Act_id a b
08 01 w hf
09 01 ad H1
10 02 fg Da1
11 02 cv ada
现在,想得到这样一张表  Pro_rea
Pro_rea_id Act_id Pro_act_id a b
14 01 04 w hf
15 01 04 ad H1
16 02 05 fg Da1
17 02 05 cv ada
Pro_rea也是从rea选取数据插入到pro_rea产生的.
想问,怎么才能正确的取到pro_act_id的值,pro_act_id是用序列产生的,并且,取到值要是最近一次插入到pro_act中的,比如06、07,而不是04、05.
而且pro_act_id在pro_act表中和对应的act_id 的值在rea.act_id是存在的.先谢谢各位高手了.

解决方案 »

  1.   

    -- Pro_rea_id上应试有个序列吧,要不然不知道14、15、16、17是怎么来的:TRY IT ..
    SQL> SELECT SEQ_PRO_REA_ID.NEXTVAL,
      2         RE.ACT_ID,
      3         PRO_ACT_ID,
      4         PRO_ACT.A,
      5         PRO_ACT.B
      6    FROM (SELECT MAX(PRO_ACT_ID) PRO_ACT_ID,
      7                 ACT_ID,A,B
      8            FROM REA
      9           GROUP BY ACT_ID,A,B)RE,
     10         PRO_ACT
     11   WHERE RE.ACT_ID = PRO_ACT.ACT_ID;REA_ID ACT_ID PRO_ACT_ID A  B
    ------ ------ ---------- -- ---
    14     01     06         W  HF
    15     01     06         AD H1
    16     02     07         FG DA1
    17     02     07         CV ADA
      

  2.   

    insert into Pro_rea
      (Act_id, Pro_act_id, a, b)
      select b.act_id,b.pro_act_id, r.a, r.b
        from rea r,
             (select a.*,
                     row_number() over(partition by act_id, a, b order by pro_act_id desc) rn
                from pro_act a) b
       where r.act_id = b.act_id
         and b.rn = 1;