Как я могу выбрать всю строку при использовании макс - PullRequest
3 голосов
/ 21 июля 2009

У меня есть таблица со следующими столбцами:

SignatureID
PatientID
PatientVisitID
TreatAuthDate
HIPAADate
DrugTestDate

Теперь у меня есть следующее утверждение Select:

SELECT *
FROM tblSignature
WHERE PatientID = 12345

Этот оператор выбора возвращает 8 строк. Мне нужно получить MAX TreatAuthDate - и с этой MAX TreatAuthDate мне нужен PatientVisitID. Тогда мне нужна информация того же типа для HipaaDate и DrugTestDate. Как я могу это сделать?

Ответы [ 2 ]

10 голосов
/ 21 июля 2009
SELECT  TOP 1 *
FROM    tblSignature 
WHERE   PatientID = 12345
ORDER BY
        TreatAuthDate DESC

Чтобы получить три последних результата для разных определений «последнего», используйте это:

SELECT  *
FROM    (
        SELECT  TOP 1 'LastThreatAuth' AS which, ts.*
        FROM    tblSignature ts
        WHERE   PatientID = 12345
        ORDER BY
                TreatAuthDate DESC
        ) SrcTreatAuth 
UNION ALL
SELECT  *
FROM    (
        SELECT  TOP 1 'LastHIPAA' AS which, ts.*
        FROM    tblSignature ts
        WHERE   PatientID = 12345
        ORDER BY
                HIPAADate DESC
        ) SrcHIPAA
UNION ALL
SELECT  *
FROM    (
        SELECT  TOP 1 'LastDrugTest' AS which, ts.*
        FROM    tblSignature ts
        WHERE   PatientID = 12345
        ORDER BY
                DrugTestDate DESC
        ) SrcDrugTest
1 голос
/ 21 июля 2009
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

Возможно, вам понадобятся левые соединения, если некоторые даты могут отсутствовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...