Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

SLOW QUERY

564278May 2 2007 — edited May 2 2007
hey am I doing anything wrong with this query because it is taking hours and hours to run:
with dp as
(select distinct pid
	from problem
	where 	    
	    lower(code) like 'icd-250%' AND
	    (QUALIFIER = 'S/P' OR
	    QUALIFIER  = 'MDxof' OR
	    QUALIFIER  = 'Hx of' OR
	    QUALIFIER  = 'H/F' OR
	    QUALIFIER  = 'Dx of' OR
	    QUALIFIER  = '? of') AND
	    CHANGE  = 2),
sm as
(select distinct ll.pid,CAST('1' AS NUMBER) riskval
	from 	lastlabs ll,
		obs  o
	where
		ll.pid = o.pid and
		ll.hdid = o.hdid and
		ll.maxlabdate = o.obsdate and
		ll.hdid = 300015 and
		(lower(o.obsvalue) not like '%quit%' or
		 lower(o.obsvalue) not like '%negative%' or
		 lower(o.obsvalue) not like '%never%' or
		 lower(o.obsvalue) not like '%no%' or
		 lower(o.obsvalue) not like '%none%') 
		and ll.pid IN(select pid from dp)),
ht as
(select distinct pid,CAST('1' AS NUMBER) riskval
	from problem
	where 	    
	    (lower(code) like 'icd-401%'
	    or lower(code) like 'icd-402%'
	    or lower(code) like 'icd-403%'
	    or lower(code) like 'icd-404%'
	    or lower(code) like 'icd-405%') AND
	    (QUALIFIER = 'S/P' OR
	    QUALIFIER  = 'MDxof' OR
	    QUALIFIER  = 'Hx of' OR
	    QUALIFIER  = 'H/F' OR
	    QUALIFIER  = 'Dx of' OR
	    QUALIFIER  = '? of') AND
	    CHANGE  = 2
	    and pid IN(select pid from dp)),
dl as
(select distinct pid,CAST('1' AS NUMBER) riskval
	from problem
	where 	    
	    lower(code) like 'icd-272%' AND
	    (QUALIFIER = 'S/P' OR
	    QUALIFIER  = 'MDxof' OR
	    QUALIFIER  = 'Hx of' OR
	    QUALIFIER  = 'H/F' OR
	    QUALIFIER  = 'Dx of' OR
	    QUALIFIER  = '? of') AND
	    CHANGE  = 2
	    and pid IN(select pid from dp)),
cvd as
	(select pid,riskval from sm
	union all
	select pid,riskval from ht
	union all
	select pid,riskval from dl),
cvdsum as
	(select pid, sum(riskval) cmfactor from cvd
	 group by pid
	 order by pid),
cm as
(select pid,cmfactor from cvdsum where cmfactor >=2),
st as
(select distinct ll.pid,ll.maxlabdate
          from 	lastlabs ll,
		obs  o
          where
		ll.pid = o.pid and
		ll.hdid = o.hdid and
		ll.maxlabdate = o.obsdate and
		ll.hdid in (54388,2909) and
                ll.pid in(select pid from cm))
select cm.pid, st.maxlabdate
        from cm
        left join st on cm.pid=st.pid
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 30 2007
Added on May 2 2007
4 comments
305 views