解决方案 »

  1.   

    SELECT T1.ID,
           T1.NAME,
           T1.WORK_TIME,
           (SELECT SUM(WORK_HOUSE)
              FROM (SELECT WORK_HOUSE,
                           ROW_NUMBER() OVER(ORDER BY ON_TIME DESC) RN
                      FROM PRODUCT_201402 T2
                     WHERE TO_CHAR(T2.ON_TIME, 'yyyymmdd') <=
                           TO_CHAR(T1.WORK_TIME, 'yyyymmdd')
                       AND T1.ID = T2.ID) T
             WHERE T.RN <= 2)
      FROM PRODUCT T1
      

  2.   

    谢谢你朋友,但是这个Product_201402是要根据产品最后一次工作时间来确定是哪个表的,比如2014-4-1那就应该是Product_201404
      

  3.   

    如果表名都是变动的,我觉得用一个SQL很难办。必须用存储过程+动态SQL来完成
      

  4.   


    select id, name, work_time, last_work_house
              from product c,
                   (select a.product_id, sum(a.work_house) as last_work_house
                      from product_morth a, product b
                     where to_char(a.on_time, 'yyyymmdd') between
                           to_char(b.work_time - 1, 'yyyymmdd') and
                           to_char(b.work_time, 'yyyymmdd')
                       and a.product_id = b.id
                     group by product_id) d
             where c.id = d.product_id(+);
      

  5.   

    3楼说的对,写存储过程吧,根据最后时间判断要查的product表,生成动态sql,把数据放到一个中间表里
      

  6.   

    3楼说的对 可以弄个临时表之类的!
    徐州.net 程序员qq群:292143448