Requette SQL

Fermé
kribac Messages postés 105 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 28 avril 2016 - 14 juin 2011 à 22:12
mpmp93 Messages postés 6651 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 15 juin 2011 à 21:46
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 257 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 22 juillet 2011 70
Modifié par Leviathan49 le 15/06/2011 à 08:33
A vu de nez je dirais :
SELECT idPatient,MAX(idDossier) FROM dossier GROUP BY idPatient
1
skymax406 Messages postés 215 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 22 avril 2015 24
15 juin 2011 à 09:30
A vu de nez hein ? :D
+1 j'adhère à sa solution :D
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
15 juin 2011 à 00:16
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 6651 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 331
Modifié par mpmp93 le 15/06/2011 à 21:58
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