Ho la seguente tabella del database con le informazioni su persone, malattie e farmaci:Come si traduce una semplice istruzione booleana in SQL?
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
Da queste tabelle, corro alcune statistiche su cui gli individui hanno preso quali farmaci e aveva cui le malattie. Da questo posso capire quali modelli sono interessanti per da approfondire. Per esempio, di seguito è un esempio semplificato del modello booleano potrei trovare per la malattia 52:
((Drug 234 = false AND Drug 474 = true AND Drug 26 = false) OR
(Drug 395 = false AND Drug 791 = false AND Drug 371 = true))
Edit: Ecco un altro esempio:
((Drug 234 = true AND Drug 474 = true AND Drug 26 = false) OR
(Drug 395 = false AND Drug 791 = false AND Drug 371 = true))
Ora voglio convertire questo modello in una query sql e trovare tutte le persone che corrispondono a questo modello.
Ad esempio, voglio trovare tutte le persone in PERSON_T che hanno avuto la malattia e ((che non ha assunto farmaci 234 e 26 prima di manifestare sintomi, ma ha assunto il farmaco 474 prima di manifestare i sintomi) o (che ha assunto droga 371 prima di manifestare i sintomi, ma non i farmaci 791 e 395 prima di manifestare sintomi))
Come potrei fare per tradurre questo modello nella query originale?
Ecco il mio primo tentativo, ma mi si blocca sul primo termine:
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 || ???)
Ho bisogno di questo per lavorare in PostgreSQL, ma suppongo che ogni dato risposta può essere tradotto da un determinato database per PostgreSQL.
risposta ai commenti
- ho fissato la formattazione di base di dati tavoli. Grazie.
- Devo essere in grado di prendere un'istruzione booleana arbitraria e tradurla in SQL. Le affermazioni booleane che stiamo effettivamente creando sono molto più lunghe dell'esempio che ho dato. Qualsiasi nuova tabella che creo sarà in un nuovo database e deve avere lo stesso schema delle tabelle originali. In questo modo per l'utente finale, possono eseguire lo stesso codice sulle nuove tabelle e funzionano allo stesso modo come se fosse eseguito sulle tabelle originali. Questo è un requisito da parte del cliente. Spero di poter creare una vista che è solo una query alle tabelle originali. Se non riusciamo a farlo funzionare, potrei creare una copia delle tabelle e filtrare i dati mentre sto copiandolo sulla nuova tabella. Non stiamo usando le reti neurali per fare l'analisi. Utilizziamo i nostri algoritmi personalizzati che si adattano molto meglio delle reti neurali.
- The Disease_Start_Date è la data in cui la persona riceve i diseaes che è probabile quando i sintomi iniziano a comparire. Disease_End_Date è quando la persona viene recuperata, il che è probabile quando i sintomi scompaiono.
- Drug_start_date è quando la persona inizia a prendere i farmaci. Drug_end_date è quando la persona smette di assumere i farmaci.
Edit ho aggiunto la mia risposta. Qualcuno può trovare una risposta più semplice?
Penso che i tuoi defs tabella sono formattati sbagliato. DISEASE_END_DATE dovrebbe essere nella tabella Persona o nella tabella Malattia? Penso che la spaziatura sia incasinata. Inoltre, a causa di ciò, il DRUG_END_DATE viene visualizzato nella tabella Disease. – MJB
Sei interessato solo a quella particolare combinazione di farmaci o ce ne saranno altri?Se ci sono più combinazioni invece di rendere questa una query SQL statica, consiglierei di creare altre 1-2 tabelle contenenti i modelli di farmaci che stai cercando e di generare una query SQL dinamica per fare riferimento alla tabella dei vincoli. Questo scalerà meglio con le tue esigenze future e ti farà risparmiare tempo per fare domande diverse ogni volta che cambierai le "droghe di interesse". Questo tipo di analisi urla anche "rete neurale" - trovando un modello non lineare tra i dati caotici. –
Non si parla di sintomi in nessuno dei tavoli. Dobbiamo supporre che le tabelle registrino solo i dati prima che i sintomi vengano esibiti? I sintomi sono registrati come malattie separate nella tabella delle malattie? O i sintomi sono irrilevanti per la query in questione? –