我試圖在SQL中構建一個報告,顯示患者上次收到特定實驗室服務的時間以及他們收到該服務的設施。不幸的是,實驗室程序和設施處於不同的表格中。以下是我現在有(提前爲我的怪異走樣道歉,這讓因爲與實際的表名更好):加入兩個表中的兩個最新事件
;with temp as (Select distinct flow.pid, flow.labdate as obsdate, flow.labvalue as obsvalue
From labstable as flow
Where flow.name = 'lab name'
)
Select distinct p.patientid, MAX(temp.obsdate) [Last Reading], COUNT(temp.obsdate) [Number of Readings],
Case
When count(temp.obsdate) > 2 then 'Active'Else 'Inactive' End [Status], facility.NAME [Facility]
From Patientrecord as p
Join temp on temp.pid = p.PId
Join (Select loc.name, MAX(a.apptstart)[Last appt], a.patientid
From Appointmentstable as a
Join Facility as loc on loc.facilityid = a.FacilityId
Where a.ApptStart = (Select MAX(appointments.apptstart) from Appointments where appointments.patinetId = a.patientid)
Group by loc.NAME, a.patientId
) facility on facility.patientId = p.PatientId
Group by p.PatientId, facility.NAME
Having MAX(temp.obsdate) between DATEADD(yyyy, -1, GETDATE()) and GETDATE()
Order by [Last Reading] asc
我這個問題是,如果病人已經超過一個設施內在時間範圍內,子查詢將選擇每個設施加入連接,通過apprx 4000誇大結果。我需要找到一種方法,只從約會列表中選擇最新的設施,然後將其加入實驗室。實驗室沒有訪問ID(這會有很大意義)。我相當有信心,我在我的子查詢選擇或相應的加入中失去了一些東西,但在四天後,我認爲我需要專業幫助。
建議非常感謝,請讓我知道我可以澄清的地方。先謝謝你!
嘗試使用'row_number' - http://msdn.microsoft.com/zh-CN/library/ms186734.aspx – podiluska
更新:數據庫出現過濾錯誤,查詢現在每個用戶都返回一個設施。不確定是否適合更新或刪除,但是此查詢現在可以正常工作。 – user3629815