2017-12-28 56 views
0

この期間に各PatientIDに関連付けられた最も早い日付を取得しようとしています。SQL:患者の値に関連付けられた最小日付を取得する方法

現在のSQLは、患者の期間内に複数の訪問/文書を返します。日付範囲内の特定のプロバイダに結びついた患者の最早日付のみを表示する必要があります。 PatientID

ため

複数の日付

enter image description here

USE EHR 
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
    DECLARE @PROV NVARCHAR (255) ='KCOOPER0' 
    DECLARE @START_DATE DATETIME = '2017-09-18 00:00:00.000'  
    DECLARE @END_DATE DATETIME = '2017-12-17 23:59:59.999'  
    --DECLARE @START_DATE DATETIME = '2017-10-02 00:00:00.000'  
    --DECLARE @END_DATE DATETIME = '2017-12-31 23:59:59.999'  

    SELECT DISTINCT 
       PS.ID AS AppointmentID 
       , CL.Code AS PatientID 
--    , SU.NameFirst AS PROVFNAME 
--    , SU.NameLast AS PROVLNAME 
--    , SU.NameSuffix AS PROVSUFFIX 
       , PS.ProviderId 
       , PS.ScheduledDateTime AS AppointmentDT 
       , PS.Duration 
       , PS.[TYPE] AS TypeDescription 
       , PS.IsActive as [Status] 
       , PS.ExternalId AS VisitID 
    --   , REPLACE(REPLACE(LOC.[Description],'[',''),']','') AS LOCATIONPLACE 
       , CDA.CreatedOn AS CDA 
       FROM PatientSchedule PS 
    INNER JOIN ContactsList CL WITH(NOLOCK) ON PS.PatientID=CL.ReferenceID 
    AND CL.Relation = 0 
     AND PS.ScheduledDateTime BETWEEN @START_DATE AND @END_DATE 
    INNER JOIN SystemUsers SU WITH(NOLOCK) ON PS.InterfaceCode=SU.InterfaceCode AND SU.Status='1' 
     INNER JOIN EMRDocuments ED ON PS.ID=ED.PatientScheduleId 
     AND ED.IsActive=1 
     LEFT JOIN 
       (SELECT DISTINCT ED.ID 
       ,SU.NPI 
       ,ED.PATIENTSCHEDULEID 
       ,EDE.CreatedOn 
       FROM 
       EMRDOCUMENTS ED 
       INNER JOIN SystemUsers SU ON ED.ModifiedByID=SU.ID 
       AND ED.IsActive = 1 
       AND ED.IsSignedOff ='TRUE' 
       INNER JOIN EMRDocumentExport EDE ON ED.ID=EDE.DocumentId 
       AND EDE.LabCompanyName = 'FollowMyHealth_CCDA' 
      ) CDA ON PS.ID=CDA.PatientScheduleId 
    WHERE --CL.Code = @PatientID 
       su.RegisteredProvider =1 
       AND SU.UserID [email protected] 
     ORDER BY CL.Code, CDA.CreatedOn 

答えて

4

これが一般的な考え方です。詳細を記入することができます。

select your fields 
from your tables 

join (select patientId, min(the date field you want) minDate 
from your tables 
where whatever 
group by patientId) minDates 

on minDates.patientId = sometable.patientId 
and the date field you want = minDate 

etc 
0

ウィンドウ関数と共通表式を使用するか、または副選択を使用して結合機能を使用しない代替方法。

select field1, field2, ... , AppointmentDT from 
    (select field1, field2, ..., 
    AppointmentDT, 
    min(AppointmentDT) OVER (PARTITION BY PatientID) minptAppointmentDT 
    from table) mindates 
where AppointmentDT = minptAppointmentDT 
:副選択を使用して

with mindates as (
    select field1, field2, ..., 
     AppointmentDT, 
     min(AppointmentDT) OVER (PARTITION BY PatientID) minptAppointmentDT 
    from table 
) 

select field1, field2, ... , AppointmentDT from mindate_table 
where AppointmentDT = minptAppointmentDT 

:CTEを使用して

関連する問題