简体   繁体   中英

Make SQL query faster that it is

I have the below query that it works fine but it takes time. And the table is being bigger and bigger so it takes more and more time. Is there any way to make this query faster? The query is here:

SELECT        patient.bartar_id, patient.bartar_enteringthesystem, patient.bartar_proviencename, patient.bartar_cityname, patient.bartar_coloplastrepname, patient.bartar_consultorname, 
                     patient.bartar_provienceofsurgeryname, patient.bartar_cityofsurgeryname, patient.bartar_surgeryhospitalname, patient.bartar_doctorsname, patient.bartar_patientstatusname, patient.bartar_ostomytypename, 
                     patient.bartar_insurancetypename, patient.bartar_ostomytimename, patient.bartar_dateofseurgery, patient.bartar_deathhealeddate, patient.bartar_customercode, patient.bartar_name, patient.bartar_family, 
                     patient.bartar_age, patient.bartar_birthyear, patient.bartar_connectornursename, patient.bartar_hastakmiliname, patient.bartar_doctorsname AS Expr1, patient.bartar_patientstatusname AS Expr2, 
                     patient.bartar_generalstatusname, patient.new_description AS CCDesc, patient.bartar_visitname, patient.bartar_repvisitname, patient.bartar_salename, patient.bartar_customersstatusname, r.bartar_date, 
                     r.bartar_delay, r.bartar_nextcall, r.new_newcaller, r.bartar_bagPerMonth, r.bartar_brand, r.bartar_paste, r.bartar_bag, r.bartar_acc, r.bartar_insuranceinfo, r.bartar_pastePerMonth
FROM            Filteredbartar_newpaitient AS patient INNER JOIN

and the rest is here:

(SELECT DISTINCT bartar_patientname,
(SELECT        TOP (1) bartar_date
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_date IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_date,
(SELECT        TOP (1) bartar_delay
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_delay IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_delay,
(SELECT        TOP (1) bartar_nextcall
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_nextcall IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_nextcall,
(SELECT        TOP (1) new_newcaller
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (new_newcaller IS NOT NULL)
ORDER BY bartar_date DESC) AS new_newcaller,
(SELECT        TOP (1) bartar_brandname
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_brand IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_brand,
(SELECT        TOP (1) bartar_pastename
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_paste IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_paste,
(SELECT        TOP (1) bartar_bagname
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_bag IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_bag,
(SELECT        TOP (1) bartar_accname
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_acc IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_acc,
(SELECT        TOP (1) bartar_pastepermonth
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_pastepermonth IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_pastePerMonth,
(SELECT        TOP (1) bartar_bagepermonth
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_bagepermonth IS NOT NULL)
ORDER BY bartar_date DESC) AS bartar_bagPerMonth,
(SELECT        TOP (1) bartar_insuranceinfoname
FROM            Filteredbartar_callcenterreport AS c2
WHERE        (bartar_patientname = cte.bartar_patientname) AND (bartar_insuranceinfo IS NOT NULL)ORDER BY bartar_date DESC) AS bartar_insuranceinfo
                           FROM            Filteredbartar_callcenterreport AS cte) AS r ON r.bartar_patientname = patient.bartar_newpaitientid
                           --where patient.bartar_enteringthesystem > @Fromdate and patient.bartar_enteringthesystem < @Todate
ORDER BY patient.bartar_enteringthesystem ASC

Get rid of all the top 1 sub
just join or left join

min(bartar_date)... 
from   
group by bartar_patientname

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM