【发布时间】:2018-10-08 10:47:38
【问题描述】:
我需要在第一个约会日期显示所有患者的信息。在这里,我附上了我所需信息的图像。请看:
我解决了它,但我想更有效地做到这一点。这是我的解决方案:
SELECT ROW_NUMBER() OVER(ORDER BY p.Name) SINo,
or1.PatientID RegNo,
p.Name PatientName,
or1.DataHead Diagnosis,
or1.AppointmentDate,
'First Appointment Date' = (
SELECT or2.AppointmentDate
FROM OPDConsultancyRepository AS or2
WHERE or2.OPDConsultancyRepositoryID = (
(
SELECT MIN(or3.OPDConsultancyRepositoryID)
FROM OPDConsultancyRepository AS or3
WHERE or3.DataType = 3
AND or3.DoctorID = 2139 AND or3.PatientID=or1.PatientID
GROUP BY
or3.PatientID
)
)
)
FROM OPDConsultancyRepository AS or1
INNER JOIN Patient AS p
ON p.PatientID = or1.PatientID
WHERE or1.DataType = 3
AND or1.DoctorID = 2139
ORDER BY
p.Name
执行计划:
Above query needs 6 sec to produce output.那么有什么建议我如何优化它?
【问题讨论】:
-
样本数据最好使用DDL + DML。请edit您的问题包括它,您当前的尝试和您想要的结果。更多详情,read this.
-
索引对性能非常重要。将该 DDL 包含在 @ZoharPeled 请求的信息中。
-
执行计划是开始的地方。请参阅paste the plan,了解在您的问题中包含执行计划的方法。
标签: sql sql-server tsql sql-server-2014