Bonjour,

J'ai un soucis dans la formulation d'une requete et j'esperais demander un peu d'aide

J'ai simplifié le problème comme suit:

J'ai une table Acte pour une base de donnée médicale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
IDActe  Historique    IDPatient
1       01-01-2001    1
1       02-01-2001    1
2       01-01-2001    2
3       03-01-2001    1
Je veux calculer la colonne IDActeParPatient:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
IDActe  Historique    IDPatient  IDActeParPatient
1       02-01-2001    1          1
2       01-01-2001    2          1
3       03-01-2001    1          2
Brievement :
La table Acte contient des Actes ainsi qu'un historique des modifications pour chaque Acte (l'index est la pair (IDActe,Historique)).
Ainsi ceux qui nous interessent sont les derniers modifiés:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT A.IDActe, MAX(Historique) AS Historique FROM Acte A GROUP BY IDActe
Jusque là pas de problème.
Maintenant, j'ai besoin de numéroter dynamiquement les Actes par patient. On ignore donc les différentes versions d'un Acte (on prend la derniere) et on compte combien il y a d'actes ayant un IDActe inférieur ou égal pour un même patient.

J'ai crée une vue DernActe avec la requete précédente et j'essaye la requete suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT DA1.*, COUNT(*) AS IDActeParPatient
FROM DernActe DA1
INNER JOIN DernActe DA2 ON DA1.IDPatient = DA2.IDPatient 
AND DA2.IDActe >= DA1.IDActe
GROUP BY DA1.IDActe
Cependant ça ne fonctionne pas, j'obtiens de grands nombres dans IDActeParPatient lorsqu'un acte a plusieurs version en historique (pour un patient ayant 1 acte mais 3 versions de l'acte, j'ai 81).

Avez-vous une idée d'où peut venir mon problème ?

Merci