本帖最后由 feitianchong 于 2009-09-24 15:38:19 编辑

解决方案 »

  1.   


    select * from 表B 
    union 
    select LIAD as LID,CUSID,LCUSPLANID,lfilldate from 表A  我这样查出来的结果,却不知怎么仅显示最新的一条,求助啊
      

  2.   

    WITH 
    tbl_a AS
     (SELECT 'LS0000077' LID, 'C093' CUSID, 'CL0000054' LCUSPLANID, '2009-09-25 17:23:36' lfilldate 
        FROM dual UNION ALL
      SELECT 'LS0000080' LID, 'C093' CUSID, 'CL0000054' LCUSPLANID, '2009-09-26 17:23:36' lfilldate 
        FROM dual),
    tbl_b AS
      (SELECT 'LS0000078' LID, 'C093' CUSID, 'CL0000054' LCUSPLANID, '2009-09-24 17:23:36' lfilldate 
        FROM dual UNION ALL
      SELECT 'LS0000079' LID, 'C094' CUSID, 'CL0000066' LCUSPLANID, '2009-09-24 18:23:36' lfilldate 
        FROM dual)
    SELECT TBL_B.LID,
           TBL_B.CUSID,
           TBL_B.LCUSPLANID,
           CASE
             WHEN TBL_A.LFILLDATE > TBL_B.LFILLDATE THEN
              TBL_A.LFILLDATE
             ELSE
              TBL_B.LFILLDATE
           END LFILLDATE
      FROM TBL_B,
           (SELECT LCUSPLANID, MAX(LFILLDATE) LFILLDATE
              FROM TBL_A
             GROUP BY LCUSPLANID) TBL_A
     WHERE TBL_B.LCUSPLANID = TBL_A.LCUSPLANID(+)
      

  3.   

    WITH ab AS (SELECT lid liad,cusid,lcusplanid,lfilldate FROM a UNION SELECT liad,cusid,lcusplanid,lfilldate FROM b)
    SELECT * FROM ab WHERE liad IN (SELECT FIRST_VALUE(liad) OVER(PARTITION BY lcusplanid ORDER BY lfilldate DESC) FROM ab);
      

  4.   

    update 表B 
    set lfilldate=m.lfilldate
    from (select lcusplanid,max(lfilldate) lfilldate from 表A) m
    where lcusplanid=m.lcusplanid
      

  5.   


    还有点问题:
    1.如果表A中存在与表B相同LCUSPLANID,则表A的日期一定会比表B中的大
    2.比较的是取表A中时间最大的那整条记录,替换B表中的那条记录,并不是仅交换时间
      

  6.   

    update 表B 
    set lfilldate=(select max(lfilldate) from 表A where 表B.lcusplanid=lcusplanid )update 表B 
    set lfilldate=m.lfilldate 
    from (select lcusplanid,max(lfilldate) lfilldate from 表A) m 
    where lcusplanid=m.lcusplanid
    这两个应该有一个可以用
      

  7.   

    16:21:45 scott@TUNGKONG> SELECT * FROM a;LID                       CUSID LCUSPLANID           LFILLDATE
    -------------------- ---------- -------------------- --------------------
    LS0077                        1 CL0054               2009-09-25 17:00:00
    LS0080                        2 CL0054               2009-09-26 17:00:00已用时间:  00: 00: 00.00
    16:21:52 scott@TUNGKONG> SELECT * FROM b;LIAD                      CUSID LCUSPLANID           LFILLDATE
    -------------------- ---------- -------------------- --------------------
    LS0078                        3 CL0054               2009-09-24 17:00:00
    LS0079                        4 CL0066               2009-09-24 17:00:00已用时间:  00: 00: 00.01
    16:21:55 scott@TUNGKONG> WITH ab AS (SELECT lid liad,cusid,lcusplanid,lfilldate FROM a UNION SELECT liad,cusid,lcusplanid,lfilldate FROM b)
    16:21:58   2  SELECT * FROM ab WHERE liad IN (SELECT FIRST_VALUE(liad) OVER(PARTITION BY lcusplanid ORDER BY lfilldate DESC) FROM ab);LIAD                      CUSID LCUSPLANID           LFILLDATE
    -------------------- ---------- -------------------- --------------------
    LS0079                        4 CL0066               2009-09-24 17:00:00
    LS0080                        2 CL0054               2009-09-26 17:00:00已用时间:  00: 00: 00.01
      

  8.   

    你的liad是不是能唯一标识表中的每一条记录?
      

  9.   


    SQL> select * from a;LID        CUSID    LCUSPLANID LFILLDATE
    ---------- -------- ---------- -----------
    LS0000077  C093     CL0000054  9/25/2009 5
    LS0000080  C093     CL0000054  9/26/2009 5SQL> select * from b;LIAD       CUSID    LCUSPLANID LFILLDATE
    ---------- -------- ---------- -----------
    LS0000078  C093     CL0000054  9/24/2009 5
    LS0000079  C094     CL0000056  9/24/2009 6SQL> 
    SQL> select liad,cusid,LCUSPLANID,to_char(LFILLDATE,'yyyy-mm-dd hh24:mi:ss') from (
      2    select liad,cusid,LCUSPLANID,LFILLDATE,row_number()over(partition by cusid,LCUSPLANID order by LFILLDATE desc) rn from (
      3      select * from b where not exists(
      4        select 1 from a where a.LCUSPLANID=b.Lcusplanid
      5      )
      6      union all
      7      select * from a where  exists(
      8        select 1 from b where b.LCUSPLANID=a.Lcusplanid
      9      )
     10    )
     11  ) where rn=1;LIAD       CUSID    LCUSPLANID TO_CHAR(LFILLDATE,'YYYY-MM-DDH
    ---------- -------- ---------- ------------------------------
    LS0000080  C093     CL0000054  2009-09-26 17:23:36
    LS0000079  C094     CL0000056  2009-09-24 18:23:36SQL>
      

  10.   

    WITH ab AS 
    (SELECT lid lid,cusid,lcusplanid,lfilldate FROM (SELECT 'LS0000077' LID, 'C093' CUSID, 'CL0000054' LCUSPLANID, '2009-09-25 17:23:36' lfilldate 
        FROM dual UNION ALL
      SELECT 'LS0000080' LID, 'C093' CUSID, 'CL0000054' LCUSPLANID, '2009-09-26 17:23:36' lfilldate 
        FROM dual) a 
     UNION 
     SELECT lid,cusid,lcusplanid,lfilldate FROM (SELECT 'LS0000078' LID, 'C093' CUSID, 'CL0000054' LCUSPLANID, '2009-09-24 17:23:36' lfilldate 
        FROM dual UNION ALL
      SELECT 'LS0000079' LID, 'C094' CUSID, 'CL0000066' LCUSPLANID, '2009-09-24 18:23:36' lfilldate 
        FROM dual) b)
     select m.ft,m.cusid,m.lcusplanid,max(m.lfilldate) 
     from (SELECT ab.*,FIRST_VALUE(lid) OVER(PARTITION BY lcusplanid ORDER BY lfilldate DESC) ft 
             FROM ab) m group by ft,cusid,lcusplanid