SELECT patientid, max(Treatauthdate), max (HippaDAte) , max (DrugTestDate)
FROM tblSignature
WHERE PatientID = 12345
group by patientid
Обратите внимание, что в этом случае вы не можете запрашивать сигнатуру, так как вы не отфильтровываете какие-либо записи (я предполагаю, что сигнатура - это ваш ПК). Кроме того, чтобы получить максимум каждой даты для каждого пациента, вполне вероятно, что они находятся в разных строках таблицы, поэтому у них не будет одинакового сигнатуры.
Получить дату посещения для каждого типа может быть сложнее, так как каждый может быть отдельным визитом.
попробуйте что-то вроде
select a.patientid, Treatvisitdate, Treatauthdate,Hippavisitdate, HippaDate, DrugTestvisitdate,
DrugTestDate
(SELECT patientid, patientvisitdate as Treatvisitdate, max(Treatauthdate) as Treatauthdate
FROM tblSignature
WHERE PatientID = 12345
group by patientid,patientvisitdate)a
join
(SELECT patientid, patientvisitdate as Hippavisitdate, max(HippaDate) as HippaDate
FROM tblSignature
WHERE PatientID = 12345
group by patientid,patientvisitdate) b on a.patientid = b.patientid
join
(SELECT patientid, patientvisitdate as DrugTestvisitdate, max(DrugTestDate) as DrugTestDate
FROM tblSignature
WHERE PatientID = 12345
group by patientid,patientvisitdate) c on a.patientid = c.patientid
Возможно, вам понадобятся левые соединения, если некоторые даты могут отсутствовать.