У меня есть 2 вопроса. Индивидуально, оба работают хорошо. Как, когда я их совмещаю, они бегут ужасно медленно и время от времени на меня. Второй запрос возвращает список счетов-фактур, которые я хочу использовать в предложении IN в первом запросе. Не уверен, что я делаю что-то неправильно. Спасибо за вашу помощь ....Объединение запросов продолжается дольше
select
ba.bill_acct_nbr,
ba.acct_name,
i.inv_id,
i.prnt_tmsp,
i.due_dt,
d.dvr_frst_name,
d.dvr_srnm,
r.ecr_ticket_no,
r.co_tmsp,
i.dr_note_amt ,
ht.amt HT,
vat.amt VAT
from rfs.rnt_agr_inv_notes i
inner join rfs.rnt_Agrs r on r.rnt_agr_nbr = i.rea_rnt_agr_nbr
inner join rfs_rv.dvr_rras d on r.rnt_agr_nbr = d.rdy_rnt_agr_nbr and d.main_dvr_flg = 'MR'
inner join rfs_rv.bus_acnts ba on ba.acct_id = i.bac_acc_id
inner join (select sum(chg_amt) amt, rain.inv_id
from rfs.rra_chgs rrc
inner join rfs.rnt_agr_inv_note_lns rainl on rrc.rrc_id=rainl.rrc_rrc_id
inner join rfs.rnt_agr_inv_notes rain on rainl.rai_inv_id=rain.inv_id
inner join rfs.rnt_agrs ra on rain.rea_rnt_agr_nbr=ra.rnt_agr_nbr
inner join rfs.rra_chg_typs rct on rrc.rct_chg_typ=rct.chg_typ
where rrc.rct_chg_typ not in ('TAX', 'SUR', 'VAT') and not (ra.stn_system='ECR' and (rrc.rct_chg_typ ='02000' or rrc.rct_chg_typ ='02201'))
group by rain.inv_id) ht on ht.inv_id=i.inv_id
inner join (select sum(chg_amt) amt, rain.inv_id
from rfs.rra_chgs rrc
inner join rfs.rnt_agr_inv_note_lns rainl on rrc.rrc_id=rainl.rrc_rrc_id
inner join rfs.rnt_agr_inv_notes rain on rainl.rai_inv_id=rain.inv_id
inner join rfs.rnt_agrs ra on rain.rea_rnt_agr_nbr=ra.rnt_agr_nbr
inner join rfs.rra_chg_typs rct on rrc.rct_chg_typ=rct.chg_typ and not (ra.stn_system='ECR' and rrc.rct_chg_typ ='02200')
where rrc.rct_chg_typ in ('TAX', 'SUR', 'VAT')
group by rain.inv_id) vat on vat.inv_id=i.inv_id
where
i.inv_id in (425001975206,550008226812,425002005105, 425002046396, 42500190929)
Я прокомментировал последнюю строку выше и заменил ее на этот код; который хорошо работает сам по себе.
i.inv_id in (select
q.inv_id
from
rfs.rnt_agr_inv_notes q,
rfs_rv.bus_acnts ba
where
ba.acct_id = q.bac_acc_id
and ba.bill_acct_nbr IN ('16785616')
AND extract(MONTH from q.prnt_tmsp) = 5
AND extract(YEAR from q.prnt_tmsp) = 2015)
При Объяснить 2-й запрос Что такое оценочное количество строк? Если это фактический запрос, кажется, что вам вообще не нужен этот подзапрос. Просто переместите условие WHERE на внешний запрос. 'Где ba.acct_id = i.bac_acc_id и ba.bill_acct_nbr IN ('16785616') и экстракт (месяц от i.prnt_tmsp) = 5 и экстракта (год от i.prnt_tmsp) = 2015)' – dnoeth
Суб запросы могут быть довольно дорогими, особенно если количество строк у вас велико. Есть ли способ попытаться написать запрос, чтобы получить те же результаты без использования подзапросов? –
Кроме того, «ЭКСТРАКТЫ» могут привести к неправильным оценкам, «i.prnt_tmsp> = timestamp» 2015-05-01 00:00:00 и «i.prnt_tmsp
dnoeth