UPDATE T1 SET PRE_PRICE=
(select price from (SELECT PRICE FROM T2 WHERE T1.PRODUCTCODE=T2.PRODUCTCODE AND 
ORDER BY T2.PRICEDATE DESC) where rownum <2);
由于order by在 rownum之后执行,所以不能放在一起 

解决方案 »

  1.   

    UPDATE T1 SET PRE_PRICE=
    (select price from (SELECT PRICE FROM T2 WHERE T1.PRODUCTCODE=T2.PRODUCTCODE ORDER BY T2.PRICEDATE DESC) where rownum <2);
      

  2.   

    改成这种写法:
    update T1 set PRE_PRICE=(select tt.PRE_PRICE from(select PRE_PRICE,RODUCTCODE from T2 where rownum<2 order by T2.PRE_PRICE desc) tt where tt.PRE_PRICE=T2.PRE_PRICE)
      

  3.   


    CREATE TABLE T1 ( 
      PRODUCTCODE  VARCHAR2 (1), 
      PRICEDATE    DATE, 
      PRICE        NUMBER, 
      PRE_PRICE    NUMBER ) ; CREATE TABLE T2 ( 
      PRODUCTCODE  VARCHAR2 (1), 
      PRICEDATE    DATE, 
      PRICE        NUMBER ) ; 
      

  4.   

    update T1 set PRE_PRICE=(select tt.PRICE from(select PRICE,PRODUCTCODE from T2 where rownum<2 order by T2.PRICEDATE desc) tt where tt.PRODUCTCODE=T1.PRODUCTCODE)
      

  5.   

    为什么要加个rownum<2?
    按日期排序取得最近的一条?
    如果是这样的话得到的结果是错误的.
      

  6.   

    UPDATE T1 x SET PRE_PRICE=
    (SELECT PRICE FROM T2 y WHERE y.PRODUCTCODE=x.PRODUCTCODE and y.PRICEDATE=(select max(PRICEDATE )from T2 z where z.PRODUCTCODE=y.PRODUCTCODE));
      

  7.   

    SQL> insert into T1 values('1',null,null,null);已创建 1 行。SQL> commit;提交完成。SQL> insert into T2 values('1',to_date('200410','YYYYMM'),9);已创建 1 行。SQL> insert into T2 values('1',to_date('200409','YYYYMM'),8);已创建 1 行。SQL> commit;提交完成。
    SQL> UPDATE T1 x SET PRE_PRICE=
      2  (SELECT PRICE FROM T2 y WHERE y.PRODUCTCODE=x.PRODUCTCODE and y.PRICEDATE=(
    select max(PRICEDATE )from T2 z where z.PRODUCTCODE=y.PRODUCTCODE));已更新 1 行。SQL> select * from t1;P PRICEDATE       PRICE  PRE_PRICE
    - ---------- ---------- ----------
    1                                9SQL>
      

  8.   

    原先是做过用MAX(PRICEDATE)来解决
    但这个速度比较慢,我要从200多万条记录中检索。
    由于历史原因PRICEDATE没有精确到秒,导致数据中会存在同一天对同一个产品的多次报价。
      

  9.   

    UPDATE T1 SET PRE_PRICE=
    (select price from (SELECT PRICE,PRODUCTCODE   FROM T2 ORDER BY T2.PRICEDATE DESC) x where T1.PRODUCTCODE=x.PRODUCTCODE  and rownum <2);
    SQL> UPDATE T1 SET PRE_PRICE=
      2  (select price from (SELECT PRICE,PRODUCTCODE   FROM T2 ORDER BY T2.PRICEDAT
    E DESC) x where T1.PRODUCTCODE=x.PRODUCTCODE  and rownum <2);已更新 1 行。已用时间:  00: 00: 00.00
    SQL> select * from t1;P PRICEDATE       PRICE  PRE_PRICE
    - ---------- ---------- ----------
    1                                9已用时间:  00: 00: 00.00
    SQL>
      

  10.   

    再加上to_date(y.pricedate)=to_date(sysdate) 和 to_date(z.pricedate)=to_date(sysdate)缩小范围UPDATE T1 x SET PRE_PRICE=
    (SELECT PRICE FROM T2 y WHERE to_date(y.pricedate)=to_date(sysdate) and y.PRODUCTCODE=x.PRODUCTCODE and y.PRICEDATE=(select max(PRICEDATE )from T2 z where z.PRODUCTCODE=y.PRODUCTCODE) and to_date(z.pricedate)=to_date(sysdate));