Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 juillet 2007
-
6 juil. 2007 à 10:45
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 2007
-
9 juil. 2007 à 19:35
Bonjour,
j'ai une table de ma bdd qui contient des ordonnances. Chaque ordonnance contient une date d'emmission, un nom de patient, et aussi un identifiant propre à l'ordonnance.
Je cherche à faire une requête SQL permettant de sortir le nom des patients qui ont été sujets à plus d'une ordonnance en moins d'un mois...
et je ne trouve pas trop comment faire, mon problème est plus algorithmique et linguistique...
pour l'instant avec cette requête :
SELECT
id_patient
,
date
FROM antibiotherapie
WHERE id_patient
IN
(SELECT id_patient
FROM antibiotherapie
GROUP
BY id_patient
HAVING
COUNT(*)
> 1
)
j'arrive à obtenir l'identifiant des patients qui ont été sujets à plus d'une ordonnance avec en face la date correspondant à l'ordonnance propre à ce patient... càd
Je voudrais obtenir un truc du genre, l'identifiant du patient avec derrière le nombre d'ordonnance qu'il a eut avec moins d'un mois d'intervalle...je sais que l'on peut utiliser la fonction SQL DATEDIFF("d", date1, date2), pour obtenir le nombre de jours entre deux dates, mais comment récuperer ces dates au sein de la requête, et comment faire s'il y en a plus de deux ?
Quelqu'un de très fort en SQL et/ou en algo peut-il m'aiguiller sur une piste ?
merci d'avance
Quentin
A voir également:
Sortir les noms qui reviennent plus d'une fois dans un mois
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 6 juil. 2007 à 15:05
Bonjour,
essaies ceci :
SELECT antibiotherapie.IdPatient, Count(antibiotherapie.IdPatient) AS CompteDeIdPatient, antibiotherapie.Dat
FROM antibiotherapie
GROUP BY antibiotherapie.IdPatient, antibiotherapie.Dat
HAVING (((Count([antibiotherapie]![IdPatient]))>1) AND ((DateDiff("\d",Date(),[antibiotherapie]![Dat]))<30));
Remarque : tu dois rennomer ton champ date pour qu'il n' y ait pas de confusion.
(Dat au lieu de date par exemple)
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 6 juil. 2007 à 16:16
non, ça marche pas.
j' ai refais la requête autrement et u' ai testé et il y' a effectivement un problème au niveau
de l' interval.
Le fait est dans une requête on ne pas faire d' opération entre la valeur d' un champ et
se valeur juste avant celle-ci.
On peut tout au plus avoir la dernière ou la première.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 6 juil. 2007 à 18:16
Bon,
je ne sais pas si ça serait possible pour toi d' ajouter à ta table
un champ qui renseigne sur la date de la précédente ordonnance et qui sera alimenté
au moment d' ajouter un enregistrement.
Je m' explique avec ton exemple:
IdOrdo IdPatient dat prec_dat
1 120 19/06/2007 19/06/2007
2 121 18/06/2007 18/06/2007
3 120 20/06/2007 19/06/2007
4 130 28/06/2007 28/06/2007
5 120 05/07/2007 20/06/2007
6 121 05/07/2007 18/06/2007
7 130 05/07/2007 28/06/2007
il est clair que pour la première ordonnance dat = prec_dat
Pour la deuxième prec_dat =dat de la précédente.
De là j' ai réussi à avoir une requête qui me renvoie
On exclut donc
> Diff=0 (dat=prec_dat => une seule ordonnance)
> Diff>30 =>plus d' un mois
Par la suite et à partir de requête1, tu peux faire une autre requête regroupement
qui te renvoie le nommbre de fois ou un patient a eu plus d' une ordo en moins
d' un mois..
A toi de voir...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 juillet 2007 9 juil. 2007 à 12:12
Bonjour Chaibat,
merci de ta réponse...
la solution que tu propose me parrait interressante, mais je ne pourrais pas la mettre en oeuvre car il est trop tard pou modifier mes tables, trop de code repose déja dessus et je n'aurais pas le temps de tout revoir...donc je vais continuer à checher...merci de ton aide, et si tu as une autre idée, je suis toujours preneur
Quentin
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 9 juil. 2007 à 16:24
Bonjour Quentin,
ravi que tu ais pu trouver ce qui te convient le mieux.
Si tu pouvais poster un tableau récapitulatif du résultat
renvoyé par ta requête, ça serait bien...
Pour ma part, si j' étais dans l' impossibilité de modifier la
structure de mes tables, il me resterais toujours la possibilité
de passer à la vieille bonne méthode, à savoir: un traitement par code.
Si le coeur t' en dis , on pourrait en discuter.
Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 juillet 2007 9 juil. 2007 à 17:09
id_patient
120
121
130
Tout simplement...
en fait j'ai trouvé la solution en bidouillant dans l'éditeur de requête de SQL Serveur...j'ai commencé par faire un
SELECT * du self join (produit cartésien d'une table sur elle-même) de ma table qui elle même est une sous-sous-requête....après en voyant ce qui tombe je corrige ce qui va ou ne va pas, j'ai aussi mis du temps à comprendre la bonne syntaxe pour la fonction DATEDIFF...il faut penser à convertir date en format date_time...va savoir pourquoi, ma date étais en format smalldatetime, ce qui me semble sensiblement similaire mais bon...
Effectivement, tout problème de requête SQL peux plus ou moins se résoudre par code, mais d'une part, réalisant ce programme dans le cadre d'un stage, j'ai pour objectif de produire un code le plus clair et concis possible pour permettre au responsable informatique de ma boite de comprendre mon code afin d'opérer des modification éventuelle...D'autre part, mais je ne suis pas sûr et certain de ça, à vérifier, je pense que tout ce que l'on peut faire en SQL plutôt qu'en code, c'est du temps gagné pour le prog, car un temps de calclul moins long...
voilà voilà, merci de ton soutient en tout cas
Quentin
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 9 juil. 2007 à 19:35
J' incite pas !
Bien que je ne soit pas convaincu par tes arguments pour ne pas faire autrment.
Merci en tout cas d' avoir donné suite.
Ravi de t' avoir connu.
Bonne continuation...