如何计算两组数据的匹配

时间:2013-02-27 20:30:08

标签: match outer-join

我正在使用Micorosft SQL Server。我有两个表,t1和t2,每个表都包含以下变量集:PatientID,AdmissionDate,DiagnosisCode。请注意,许可中的多个诊断显示为多行。每个表格显示了不同的患者列表。这些表很大,因此解决方案必须高效(400,000行)。我想计算表1中患者与表2中患者的相似性。相似性定义为两名患者的诊断数量除以以下总和的比率:

.8 *(表1中患者的诊断次数与表2中的患者不匹配)+ .2 *(表2中患者的诊断数量与表1中的患者不匹配)+ (两名患者分享的诊断数量)

对于如何组织此问题的任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

这是我尝试解决这个问题,我希望其他人能找到更有效的方法:

select #t1.id1, #t1.adm1, #t1.dx1, #t2.id2, #t2.adm2, #t2.dx2, iif(#t1.dx1=#t2.dx2,1,0) as shared Into #t3 From #t1 cross join #t2
Select id1, adm1, dx1, id2, adm2, sum(shared) as In1In2, iif(sum(shared)=0,1,0) as In1Not2 into #t4 from #t3 group by id1, adm1, dx1, id2, adm2 
Select id1, adm1, dx1, id2, adm2, sum(In1Not2) as nIn1Not2, into #t5 from #t4 group by id1, adm1, id2, adm2 
Select id1, adm1, dx2, id2, adm2, iif(sum(shared)=0,1,0) as In2Not1 into #t6 from #t3 group by id1, adm1, dx2, id2, adm2 
Select id1, adm1, id2, adm2, sum(In2Not1) as nIn2Not1 into #t7 from #t6 group by id1, adm1, id2, adm2 

在下一步中,计算值将合并到一个公用表中。这种尝试的问题是在t1为100,000和t2为400,000条记录上运行它需要2个多小时。