7/17 Perdus de vue (PDV) 2/2 Donc la table Temp contient maintenant une copie de la liste des dossiers qui ont assisté à une consultation médicale dans les 90 derniers jours ?
Oui, cette liste est une sorte de copie en mémoire des données de la base, juste pour la durée du calcul. Il faut compléter la liste pour ajouter les dossiers qui ont eu une consultation sociale, psychologique ou une séance d'éducation thérapeutique (ETP): SociCons consultations sociales Psy_Cons consultations psychologiques ObseCons séances d'ETP
INSERT INTO Temp (Doss) SELECT DISTINCT Doss FROM SociCons WHERE Dat_>=DATE_SUB(CURDATE(),INTERVAL @nb_jour DAY) INSERT INTO Temp (Doss) SELECT DISTINCT Doss FROM Psy_Cons WHERE Dat_>=DATE_SUB(CURDATE(),INTERVAL @nb_jour DAY) INSERT INTO Temp (Doss) SELECT DISTINCT Doss FROM ObseCons WHERE Dat_>=DATE_SUB(CURDATE(),INTERVAL @nb_jour DAY)
Passons à l'ajout des dossiers qui sont passés à l'accueil quel que soit le motif. On a déjà vu la table Entr pour l'Accueil dans la formation 3.
INSERT INTO Temp (Doss) SELECT DISTINCT Doss FROM Entr WHERE ArriHoro>=DATE_SUB(CURDATE(),INTERVAL @nb_jour DAY)
Ajoutons les dossiers dont un examen biologique a été saisi. Les examens de laboratoire sont stockés dans cette même table Entr. Mais le patient n'est pas forcément passé par l'accueil: certains centres ne gère pas l'écran Accueil, et dans tous les cas, le laboratoire peut faire une saisie directe. On pose donc une condition sur la désignation de l'examen LaboDesi et sa date LaboDat_ dans la table.
INSERT INTO Temp (Doss) SELECT DISTINCT Doss FROM Entr WHERE LaboDesi<>"" AND LaboDat_>=DATE_SUB(CURDATE(),INTERVAL @nb_jour DAY)
Enfin, on ajoute les patients qui ont reçu une dispensation de médicaments. La table Item stocke les entrées/sorties de produits pharmaceutiques. Lorsque la colonne Dest contient la valeur 6, il s'agit d'une délivrance à un patient:
INSERT INTO Temp (Doss) SELECT DISTINCT Doss FROM Item WHERE Dat_>=DATE_SUB(CURDATE(),INTERVAL @nb_jour DAY) AND Dest=6
Donc maintenant la table Temp contient tous les patients passés au centre quelque soit le motif. Est-ce que les patients qui ne sont pas dans cette table sont perdus de vue ?
Oui, s'il ne sont pas décédés. Ci-dessous, on compte les patients sous ARV non décédés, dont on soustrait ceux de la table Temp. LEFT JOIN...ON associé à IS NULL permet de soustraire à la table Doss les lignes de la table Temp (on verra l'usage de ces mots SQL une autre fois en détail). D'autre part, je mets la condition DISTINCT sur le résultat car la table Temp contient autant de fois les dossiers passés au centre plusieurs fois:
nb_arv_pdv<-SELECT COUNT( DISTINCT Nume ) FROM Doss LEFT JOIN Temp ON Doss.Nume=Temp.Doss WHERE Temp.Doss IS NULL AND Doss.Arv_Desi<>"" AND RensDeceDat_=0
Et comme d'habitude pour un tri par sexe et âge (ici, garçons de moins de 15 ans):
nb_arv_pdv<-SELECT COUNT( DISTINCT Nume ) FROM Doss LEFT JOIN Temp ON Doss.Nume=Temp.Doss WHERE Temp.Doss IS NULL AND Doss.Arv_Desi<>"" AND RensDeceDat_=0 AND RensSexe=1 AND RensAge_<15
Pour retirer aussi les patients en voyage:
AND RensVoya<>1
On peut écrire "Doss.RensSexe" etc. au lieu de "RensSexe", mais il n'y a pas d'ambiguité avec la table Temp.
|