2017-11-16 9 views
0

添付のコードは、各患者の最初のORDER_PROC.ORDER_INSTを返すものとします。私はいくつかのケースで複数のレコードを取得しています。 より良いアプローチに関するご意見はありますか? おかげ スティーブ患者1人当たりのイベント

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

いくつかのサンプル・テーブル・データを追加し、期待される結果のためのパーティションを作成するには - 形式のテキストではなく画像として。 (BTW、_that_ Steve Jones?) – jarlh

+2

Aaron BertrandはExploit JOIN sintaxisの使用を促進し、素晴らしい記事を書いている[古いスタイルのJOINを使用した悪い習慣](http://sqlblog.com/blogs/aaron_bertrand/ archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)を参照してください。 –

+1

これは発注システムのようです。矛盾した結果と不正確な結果がない限り、NOLOCKのヒントはどこにでも飛び散らないようにしてください。 https://blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere/。また、ANSI-92スタイルの結合を使用することを検討する必要があります。これらの結合は25年以上前からありました。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx –

答えて

1

使用ROW_NUMBER()は、各患者

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 
関連する問題