2016-05-31 7 views
0

私は特殊なカウントをしなければなりません。これは患者の医療データです。Occurencesにカウントを続ける

ここでの結果がでなければなりません
Patient_ID Appointment  DoctorID ApptType Completed 

10000   20160531090000  001  ABA   Y 
10000   20150530100000  001  ABA   Y 
10005   20160202140000  001  LDA   Y 
10005   20160531110000  002  CCN   Y 
10005   20160303151515  002  CCN   Y 
10015   20150301120000  001  TRI   Y 

は、医師は彼の患者のデータセットを持っているように、患者を数える最高に基づいて、この情報をエクスポートするにはAPPTを完了したします。

DoctorID PatientID 
001   10000 
001   10015 
002   10005 

このアプローチにはどのような方法が最適ですか?

+1

ご説明し、所望の結果が一致していません。 「最高の数」は何を意味しますか? –

答えて

0

おそらく、各患者に最も一般的な医師が欲しいです。あなたがrow_number()および凝集にこれを行うことができます。

select dp.* 
from (select doctorid, patientid, count(*) as cnt 
      row_number() over (partition by patientid order by count(*) desc) as seqnum 
     from t 
     group by doctorid, patientid 
    ) dp 
where seqnum = 1; 

結びつきがある場合、これは任意の医師を返します。それらのすべてが必要な場合は、rank()またはdense_rank()を代わりに使用してください。クエリ以下

0

必要な出力が得られます: -

select DoctorID,count(Patient_ID) Appt_Completed,Patient_ID into #t1 from test 
where completed='Y' 
group by DoctorID,Patient_ID 
having count(Patient_ID) > 1 

select * from (
select DoctorID,Patient_ID from #t1 
UNION 
select DoctorID,Patient_ID from test where Patient_ID NOT IN (select distinct Patient_ID from #t1) 
) A 

drop table #t1 

出力: -

DoctorID Patient_ID 
    001  10000 
    001  10015 
    002  10005 
関連する問題