2009-07-21 7 views
3

mit habe ich eine Tabelle mit den folgenden Spalten:Wie kann ich die gesamte Zeile auswählen, wenn max

SignatureID 
PatientID 
PatientVisitID 
TreatAuthDate 
HIPAADate 
DrugTestDate 

Jetzt habe ich die folgende Select-Anweisung:

SELECT * 
FROM tblSignature 
WHERE PatientID = 12345 

Diese Anweisung select 8 Zeilen zurückgibt . Was ich erreichen muss, ist das MAX TreatAuthDate - und mit diesem MAX TreatAuthDate brauche ich die PatientVisitID. Dann brauche ich die gleiche Art von Informationen für das HipaaDate und DrugTestDate. Wie kann ich das machen?

Antwort

10
SELECT TOP 1 * 
FROM tblSignature 
WHERE PatientID = 12345 
ORDER BY 
     TreatAuthDate DESC 

Um drei letzte Ergebnisse für verschiedene Definitionen von „liest“ zu erhalten, verwenden Sie diese:

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 
+0

Das tut genau das, was ich brauche. Gibt es einen Vorschlag, wie ich die Top 1 für jedes Treatauthdate, Hipaadate und Drugtestdate bekommen könnte? die oberste 1 für Behandlung Datum möglicherweise nicht die Top 1 für die Drogetestdate, aber ich würde die patientvisitID für die Top 1 treatauthdate benötigen ... dann die patientvisitID für die Top 1 hipaadate ... dann die patientvisitID für die Top1 Drugtestdate. Wie könnte ich dies in eine gespeicherte Prozedur einfügen und uns damit ein Objekt füllen? – swolff1978

+0

Perfekt. Ich habe den obigen Code geändert, indem ich SELECT * FROM (...) hinzugefügt habe SrcTreatAuth UNION ALL SELECT * VON (...) SrcHipaa UNION ALL ... – swolff1978

+0

@ swolff1978: korrekt. Ich vergesse immer, dass ich nicht in 'Oracle' bin, um Aliase von Abfragen auszulassen. – Quassnoi

1
SELECT patientid, max(Treatauthdate), max (HippaDAte) , max (DrugTestDate) 
FROM tblSignature 
WHERE PatientID = 12345 
group by patientid 

Hinweis Sie signatureid in diesem Fall nicht fragen können, wie Sie jede nicht filtern würden zeichnet auf (Ich mache die Annahme signaturid ist Ihre PK). Um das Maximum jedes Datums pro Patient zu erhalten, ist es wahrscheinlich, dass sie sich jeweils in einer anderen Zeile der Tabelle befinden und daher nicht die gleiche Signatur-ID haben.

Das Besuchsdatum für jeden Typ kann schwieriger sein, da jeder ein separater Besuch sein kann. versuchen so etwas wie

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 

Unter Umständen müssen Sie links schließt sich, wenn einige der Daten sind nicht drin sein könnte.

+0

Ausgezeichnet! Ich "verheiratet" Quassnois und HLGEMs Antworten und bekam die Ergebnisse, nach denen ich suchte - etwas in der Art von: a.patientid, Treatvisitedatum, Treatauthdate, Hippavisitdate, HippaDate, DrugTestvisitdate, DrugTestDate (SELECT TOP 1 patientid, patientvisitedate als Treatvisitdatum, Treatauthdate als Treatauthdate FROM tblSignature WHERE PatientID = 12345 Auftrag von Treatauthdate) ein Join (SELECT TOP 1 PatientID, Patientenvisite als Hippavisitdate, HippaDate als HippaDate FROM tblSignature WHERE PatientID = 12345 Auftrag von Hippadate) b auf a.patientid = b.PatientID .. – swolff1978

Verwandte Themen