select b.prd_inst_id,b.acct_nbr_97 
from (select b.acct_nbr_97,b.prd_inst_id
      from (select distinct b.prd_inst_id
            from eda.tb_b_ft_ofr_inst_day_562 partition(p12) a,
           eda.tb_b_ft_prd_inst_day_562 partition(p12) b
            where a.ofr_inst_id=b.ofr_inst_id and a.OFR_NET_NUM=1 and to_char(a.crt_date,'yyyymmdd')<='20110613' and a.ofr_id in (500278300,500278301)) a,
            eda.tb_b_ft_prd_inst_day_562 partition(p12) b
      where a.prd_inst_id=b.prd_inst_id) a,
      eda.tb_b_ft_prd_inst_day_562 partition(p12) b
where a.acct_nbr_97=b.acct_nbr_97这个是我完全根据逻辑意思写的 感觉很混乱 不知道怎么改了。。 请高人指点一下

解决方案 »

  1.   

    select b.prd_inst_id, b.acct_nbr_97
      from (select b.acct_nbr_97, b.prd_inst_id
              from (select distinct b.prd_inst_id
                      from eda.tb_b_ft_ofr_inst_day_562 partition(p12) a,
                           eda.tb_b_ft_prd_inst_day_562 partition(p12) b
                     where a.ofr_inst_id = b.ofr_inst_id
                       and a.OFR_NET_NUM = 1
                       and crt_date <= to_date('20110613','yyyy-mm-dd')
                       and (a.ofr_id = 500278300 or a.ofr_id=500278301)) a,
                   eda.tb_b_ft_prd_inst_day_562 partition(p12) b
             where a.prd_inst_id = b.prd_inst_id) a,
           eda.tb_b_ft_prd_inst_day_562 partition(p12) b
     where a.acct_nbr_97 = b.acct_nbr_97-------单单从SQL上看,就这个多。
      

  2.   

    从SQL语句本身来说,给你两个建议
    1、不要在查询条件的列上使用函数,这可能导致你该列上有索引也会用不上(除非建立函数索引)。
    2、多次使用同一表最好使用with命名子查询
    3、其它根据你执行计划情况
    WITH tb AS
     (SELECT * FROM eda.tb_b_ft_prd_inst_day_562 PARTITION(p12))
    SELECT b.prd_inst_id, b.acct_nbr_97
      FROM (SELECT b.acct_nbr_97, b.prd_inst_id
              FROM (SELECT DISTINCT b.prd_inst_id
                      FROM eda.tb_b_ft_ofr_inst_day_562 PARTITION(p12) a, tb b
                     WHERE a.ofr_inst_id = b.ofr_inst_id
                       AND a.OFR_NET_NUM = 1
                       AND a.crt_date<=date'2011-06-13'
                       AND a.ofr_id IN (500278300, 500278301)) a,
                   tb b
             WHERE a.prd_inst_id = b.prd_inst_id) a,
           tb b
     WHERE a.acct_nbr_97 = b.acct_nbr_97
      

  3.   

    楼主是个人才啊,这种sql你都能写出来,呵呵