0

Micorosft SQL Server を使用しています。2 つのテーブル t1 と t2 があり、それぞれが次の一連の変数で構成されています: PatientID、AdmissionDate、DiagnosisCode。入院内の複数の診断が複数の行として表示されることに注意してください。各テーブルには、異なる患者のリストが表示されます。これらのテーブルは大きいため、ソリューションは効率的でなければなりません (400,000 行)。表 1 の患者と表 2 の患者の類似性を計算したいと思います。類似性は、2 人の患者が共有する診断数の比率を次の合計で割った値として定義されます。

.8*(表 2 の患者と一致しない表 1 の患者の診断数) + .2*(表 1 の患者と一致しない表 2 の患者の診断数) + (数2 人の患者が共有する診断の

この問題を整理する方法についての提案は大歓迎です。

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 に答える