Requette SQL

kribac Messages postés 148 Statut Membre -  
mpmp93 Messages postés 7217 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je vais expliquer ce que je veux

j'ai plusieur patient

chaque patient a plusieur dossier

par ex patient 01 : dossier 01
dossier 02
dossier 03
dossier 04
dossier 05
par ex patient 02 : dossier 01
dossier 02
dossier 03
par ex patient 03 : dossier 01
dossier 02
dossier 03
dossier 04
dossier 05
dossier 06
dossier 07

donc je veux avoir par une requette SQL le dernier dossier de chaque patient

c'est a dire dans ce exemple j'aurrai pour

le patient 01 : dossier 05
le patient 02 : dossier 03
le patient 03 : dossier 07

j'ai ma table dossier(codeD) et patient(codeP)

3 réponses

Leviathan49 Messages postés 267 Statut Membre 70
 
A vu de nez je dirais :
SELECT idPatient,MAX(idDossier) FROM dossier GROUP BY idPatient
1
skymax406 Messages postés 242 Statut Membre 24
 
A vu de nez hein ? :D
+1 j'adhère à sa solution :D
0
loupius Messages postés 789 Statut Membre 148
 
Je suppose une table 'dossier' ainsi constituée:
- idDossier
- idPatient
- autres champs.
Je veux extraire le dernier dossier (idDossier le plus élevé) d'un patient 'lambda'; une réponse peut être:
"SELECT * FROM dossier WHERE idPatient=lambda ORDER BY idDossier DESC LIMIT 1"
Il ne te reste plus qu'à trouver comment faire pour obtenir ce résultat pour tous les patients...
Bonne réflexion.
0
mpmp93 Messages postés 7217 Date d'inscription   Statut Membre Dernière intervention   1 340
 
Bonsoir,

exemple pour le patient 02 : dossier 03 faire:

SELECT * num_dossier FROM dossiers WHERE patient='02' ORDER BY dossier DESC LIMIT 0,1

En clair:
- sortir numéro dossier
- pour patient numéro 2
- en triant les numéros de dossier dans l'ordre décroissant (donc dernier en premier...)
- et limité à 1 item après l'item d'ordre 0

PS: indexer les champs sur lesquels vous faites des filtrages et des tris: ici num_dossier et patient

La solution proposée ici évite de faire un regroupement. Elle est très rapide car s'arrête après extraction des données au premier résultat trouvé.

A+
0