0

我正在使用 Microsoft SQL Server。我有两个表,t1 和 t2,每个表都包含以下一组变量:PatientID、AdmissionDate、DiagnosisCode。请注意,住院期间的多个诊断显示为多行。每个表显示不同的患者列表。这些表很大,因此解决方案必须高效(400,000 行)。我想计算表 1 中的患者与表 2 中的患者的相似度。相似度定义为两个患者共享的诊断数量除以以下总和:

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

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

4

1 回答 1

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 

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

于 2013-02-28T16:49:37.633 回答