我必须做一个专门的计数。这是患者的医疗数据。
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
这里的结果应该是,想要导出这些信息所以Doctor有一个他的患者的数据集,基于患者已经完成的最高计数。
DoctorID PatientID
001 10000
001 10015
002 10005
最好的方法是什么?
答案 0 :(得分: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()
。
答案 1 :(得分: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