私は、人、病気、および薬に関する情報を含む次のデータベーステーブルを持っています。
PERSON_T DISEASE_T DRUG_T
========= ========== ========
PERSON_ID DISEASE_ID DRUG_ID
GENDER PERSON_ID PERSON_ID
NAME DISEASE_START_DATE DRUG_START_DATE
DISEASE_END_DATE DRUG_END_DATE
これらの表から、どの個人がどの薬を服用し、どの病気にかかったかについての統計を実行します。これから、どのパターンが私にとってさらに掘り下げて興味深いかを理解することができます。たとえば、以下は、病気52で見つかる可能性のあるブールパターンの簡略化された例です。
( (Drug 234 = false AND Drug 474 = true AND Drug 26 = false) OR
(Drug 395 = false AND Drug 791 = false AND Drug 371 = true) )
編集: 別の例を次に示します。
( (Drug 234 = true AND Drug 474 = true AND Drug 26 = false) OR
(Drug 395 = false AND Drug 791 = false AND Drug 371 = true) )
次に、このパターンをSQLクエリに変換して、このパターンに一致するすべての人を見つけたいと思います。
たとえば、PERSON_Tで、病気にかかっていて((症状が現れる前に薬234と26を服用しなかったが、症状が現れる前に薬474を服用した)または(症状が現れる前に薬371を服用した)すべての人を見つけたいと思います。 、しかし症状を示す前に薬物791および395ではない))
このパターンを元のクエリに戻すにはどうすればよいですか?
これが私の最初の試みですが、私は最初の用語で立ち往生しています:
SELECT * FROM PERSON_T, DRUG_T, DISEASE_T
WHERE DISEASE_ID = 52 AND
PERSON_T.PERSON_ID = DISEASE_T.PERSON_ID AND
PERSON_T.PERSON_ID = DRUG_T.PERSON_ID AND
(DRUG_T.DRUG_ID=234 AND (DRUG_T.DRUG_START_DATE>DISEASE_T.END_DATE || ???)
PostgreSqlで機能するにはこれが必要ですが、特定の回答を特定のデータベースからPostgreSqlに変換できると思います。
コメントへの回答
- データベーステーブルのフォーマットを修正しました。ありがとうございました。
- 任意のブール式を取り、それをSQLに変換できる必要があります。実際に作成しているブールステートメントは、私が示した例よりもはるかに長くなっています。私が作成する新しいテーブルはすべて新しいデータベースにあり、元のテーブルと同じスキーマを持っている必要があります。このようにしてエンドユーザーは、新しいテーブルで同じコードを実行でき、元のテーブルで実行した場合と同じように機能します。これはお客様からの要求です。元のテーブルへの単なるクエリであるビューを作成できることを望んでいます。それが機能しない場合は、テーブルのコピーを作成し、新しいテーブルにコピーするときにデータをフィルタリングすることがあります。分析にはニューラルネットワークを使用していません。ニューラルネットワークよりもはるかに優れた拡張性を備えた独自のカスタムアルゴリズムを使用しています。
- Disease_Start_Dateは、人が病気にかかった日付であり、症状が現れ始めたときに発生する可能性があります。Disease_End_Dateは、人が回復したときであり、症状が消えたときに発生する可能性があります。
- Drug_start_dateは、その人が薬の服用を開始したときです。Drug_end_dateは、人が薬の服用をやめたときです。
編集 私は自分の答えを追加しました。誰かがもっと簡単な答えを思い付くことができますか?