Requette SQL

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

  • Votes
  • Date
  • Date décroissante
  1. A vu de nez je dirais :
    SELECT idPatient,MAX(idDossier) FROM dossier GROUP BY idPatient
    1. A vu de nez hein ? :D
      +1 j'adhère à sa solution :D
  2. 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.
    1. 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+