记住发生的事情

时间:2016-05-31 00:33:20

标签: sql sql-server

我必须做一个专门的计数。这是患者的医疗数据。

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

最好的方法是什么?

2 个答案:

答案 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