我正在處理查詢,需要查看患者訪問診所時輸入的患者生命體徵(特別是血壓)。我拉動了2015年全年的結果,當然也有一些患者多次訪問過,而且我只需要查看最近訪問時輸入的生命體徵。另一種輕微的扭曲是收縮壓和舒張壓分別進入,所以我結束了類似的結果:查找結果集中的最近日期
Patient ID Name DOB Test Results Date
---------------------------------------------------------------------------------
1000 John Smith 1/1/1955 BP - Diastolic 120 2/10/2015
1000 John Smith 1/1/1955 BP - Systolic 70 2/10/2015
1000 John Smith 1/1/1955 BP - Diastolic 128 7/12/2015
1000 John Smith 1/1/1955 BP - Systolic 75 7/12/2015
1000 John Smith 1/1/1955 BP - Diastolic 130 10/22/2015
1000 John Smith 1/1/1955 BP - Systolic 76 10/22/2015
9999 Jane Doe 5/4/1970 BP - Diastolic 130 4/2/2015
9999 Jane Doe 5/4/1970 BP - Systolic 60 4/2/2015
9999 Jane Doe 5/4/1970 BP - Diastolic 127 11/20/2015
9999 Jane Doe 5/4/1970 BP - Systolic 65 11/20/2015
有26,000+效果如此明顯,我不想去通過每一個病人,看到他們的時候最近的結果是。我想我的結果是這樣的:
Patient ID Name DOB Test Results Date
---------------------------------------------------------------------------------
1000 John Smith 1/1/1955 BP - Diastolic 130 10/22/2015
1000 John Smith 1/1/1955 BP - Systolic 76 10/22/2015
9999 Jane Doe 5/4/1970 BP - Diastolic 127 11/20/2015
9999 Jane Doe 5/4/1970 BP - Systolic 65 11/20/2015
我知道這個名字和出生和諸如此類的日期會得到重複,但我主要集中在結果列。
這裏是我的查詢:
SELECT DISTINCT
pd.PatientID as [Patient ID],
pd.PatientName as Name,
pd.DateOfBirth as DOB,
v.Test as Test,
v.Results as Results,
v.TestDate as Date
FROM PatientDemographic pd JOIN Vitals v ON pd.PatientID = v.PatientID
WHERE v.TestDate BETWEEN '01/01/2015' AND '12/31/2015'
AND v.Test LIKE 'BP%'
ORDER BY pd.PatientID, v.TestDate
四處尋找其他的答案,我試着做一個GROUP BY
和MAX()
聚合函數在SELECT
聲明v.TestDate
柱(我是專門引用this link,雖然這對後Oracle和我正在使用SQL Server,所以我不完全確定語法是否相同)。我的查詢,則看起來像:
SELECT DISTINCT
pd.PatientID as [Patient ID],
pd.PatientName as Name,
pd.DateOfBirth as DOB,
v.Test as Test,
v.Results as Results,
MAX(v.TestDate) as Date
FROM PatientDemographic pd JOIN Vitals v ON pd.PatientID = v.PatientID
WHERE v.TestDate BETWEEN '01/01/2015' AND '12/31/2015'
AND v.Test LIKE 'BP%'
GROUP BY pd.PatientID
誠然,我一直在努力一點點用GROUP BY
。在這種特殊情況下,我收到一個錯誤,說明我需要將患者姓名列添加到GROUP BY
子句中,所以我確實需要DOB。然後是測試名稱。基本上,它要我添加從我的SELECT
聲明到GROUP BY
的所有內容。
什麼是最好的方式來進行並獲得我最近的患者訪問?
這似乎已經成功了!謝謝! – EJF