2017-11-16 2 views
0

Der angehängte Code soll die erste ORDER_PROC.ORDER_INST für jeden Patienten zurückgeben. Ich erhalte in einigen Fällen mehrere Datensätze. Irgendwelche Vorschläge für einen besseren Ansatz? Dank SteveErstes Ereignis pro Patienten

SELECT DISTINCT 
    ORDER_PROC.PAT_ENC_CSN_ID as ordercsn, Min(ORDER_PROC.ORDER_INST) as 
    CodeStatus_Datetime, CLARITY_SER.PROV_NAME as CodeStatus_OrderProvider 
FROM 
    ORDER_PROC with(nolock) , ORDER_METRICS with(nolock) , CLARITY_SER 
    with(nolock) 

WHERE 
    ORDER_PROC.ORDER_PROC_ID = ORDER_METRICS.ORDER_ID AND 
    ORDER_METRICS.ORDERING_PROV_ID = CLARITY_SER.PROV_ID AND 
    --ORDER_PROC.REASON_FOR_CANC_C IS NULL AND 
    (ORDER_PROC.PROC_CODE = 'COD1' OR 
    ORDER_PROC.PROC_CODE = 'COD2' OR 
    ORDER_PROC.PROC_CODE = 'COD3' 
) 
GROUP by 
ORDER_PROC.PAT_ENC_CSN_ID, ORDER_PROC.ORDER_INST,CLARITY_SER.PROV_NAME 
+1

einige Beispieltabellendaten hinzufügen und das erwartete Ergebnis erstellen - als formatierten Text, keine Bilder. (BTW, _that_ Steve Jones?) – jarlh

+2

Fördern Sie die Verwendung von expliziten 'JOIN' sintaxis, Aaron Bertrand schrieb einen schönen Artikel [Schlechte Angewohnheiten zu treten: mit alten Stil JOINs] (http://sqlblog.com/blogs/aaron_bertrand/ archiv/2009/10/08/bad-gewohnheiten-kick-using-old-style-joins.aspx) darüber. –

+1

Das sieht wie ein Bestellsystem aus. Ich würde Sie dringend bitten, diesen NOLOCK-Hinweis nicht überall zu verspritzen, es sei denn, Sie sind mit inkonsistenten und ungenauen Ergebnissen in Ordnung. https://blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere/. Sie sollten auch ANSI-92 Style Joins verwenden, die es schon seit über 25 Jahren gibt. http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx –

Antwort

1

Verwenden ROW_NUMBER() zu Partition für jeden Patienten

SELECT * 
FROM (
    SELECT OP.PAT_ENC_CSN_ID as ordercsn, 
      OP.ORDER_INST, 
      CodeStatus_Datetime, 
      CS.PROV_NAME as CodeStatus_OrderProvider, 
      ROW_NUMBER() OVER (PARTITION BY OP.PAT_ENC_CSN_ID 
           ORDER BY OP.ORDER_INST) as rn 
    FROM ORDER_PROC OP 
    JOIN ORDER_METRICS OM 
     OP.ORDER_PROC_ID = OM.ORDER_ID 
    JOIN CLARITY_SER CS 
     OM.ORDERING_PROV_ID = CS.PROV_ID 

    WHERE 
     OP.PROC_CODE IN ('COD1','COD2','COD3') 
    ) as T 
WHERE rn = 1 
Verwandte Themen