IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête renvoyant les premieres dates


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut Requête renvoyant les premieres dates
    Bonjour à Tous

    Ma table contient les chirurgies (T_Intervention) des patients selon le sejour hospitalier (ID_sejour) et la date d'intervention (Date_Intervention), avec l'index NumAuto (ID_intervention) de la table.
    Ainsi, si un patient à plusieurs chirurgies dans le même séjour, elles sont distinguées par l'ID_Intervention et la Date d'intervention.
    Malheureusement, l'entrée des infos ne s'est pas fait dans l'ordre puisque parfois seule la 2ième intervention à été initialement entrée. Pour rattraper cette erreur, je rentre à postériori les interventions mais l'ID_Intervention ne correspond plus à l'ordre des interventions. Seule la date et l'heure d'intervention peuvent classer les interventions.
    Dans une requête je voudrai avoir le numero du séjour, la premiere intervention reposant sur la date et l'ID_intervention correspondant à cette date. Mais la requête suivante me renvoie toutes les interventions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T_intervention.ID_sejour, First(T_intervention.Date_intervention) AS Premiere_intervention, T_intervention.ID_Intervention
    FROM T_intervention
    GROUP BY T_intervention.ID_sejour, T_intervention.ID_Intervention;
    Comment n'avoir que l'ID_intervention correspondant à la premiere date du même sejour ? Faut-il 2 requêtes ?
    Merci par avance pour vos suggestions.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 790
    Points : 58 204
    Points
    58 204
    Billets dans le blog
    42
    Par défaut
    bonsoir,

    Citation Envoyé par docjo Voir le message
    ... mais l'ID_Intervention ne correspond plus à l'ordre des interventions. Seule la date et l'heure d'intervention peuvent classer les interventions.
    Exactement, seules les dates d'interventions sont à même de classer tes interventions. Oublie ton numéroAuto [idIntervention] pour le classement et réserve le uniquement pour faire les jointures entres tables (clé primaire-clé étrangère).
    De cette façon [idIntervention] peut valoir 1,2, 36784 ou 148576 ou ... tu t'en fiches, tu le laisses s'incrémenter comme Access l'entend, de toute façon il ne signifie plus rien.

    Dans une requête je voudrai avoir le numero du séjour, la premiere intervention reposant sur la date et l'ID_intervention correspondant à cette date.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_intervention.ID_sejour, 
    DMin("[Date_intervention]", "T_Intervention", "[ID_sejour]=" & ID_sejour) AS Premiere_intervention, 
    T_intervention.ID_Intervention
    FROM T_intervention;
    Pour chaque intervention, on recherche la plus petite date d'intervention (c-a-d la première intervention) pour le séjour en cours.


    Tu peux aussi décomposer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ID_Sejour, Min(Date_intervention] as PremiereIntervention
    FROM T_Intervention
    GROUP BY ID_sejour;
    donne la première intervention pour chaque séjour.

    Pour ramener les infos uniquement de la première intervention de chaque séjour:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM T_intervention T INNER JOIN SousRequetePrecedente U
    ON T.ID_Sejour=U.ID_Sejour
          AND T.Date_Intervention=U.PremiereIntervention

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Merci F-Leb pour cette réponse ultra détaillée. Cela revient donc à faire 2 requêtes ce qui me semble toujours (intuitivement) compliqué pour une question aussi simple. Et ce que j'avais dans l'idée c'était faire la sous requête dans un des critères de recherche mais je n'ai pas réussi. Tu confirmes donc les 2 requêtes ?

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 790
    Points : 58 204
    Points
    58 204
    Billets dans le blog
    42
    Par défaut
    bonsoir,

    tu peux faire celle-là aussi si tu préfères:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T_intervention.ID_sejour, 
    DMin("[Date_intervention]", "T_Intervention", "[ID_sejour]=" & ID_sejour) AS Premiere_intervention, 
    T_intervention.ID_Intervention
    FROM T_intervention
    WHERE [Date_Intervention]=DMin("[Date_intervention]", "T_Intervention", "[ID_sejour]=" & ID_sejour);

    Le DMin revient à faire une sous-requête de toute façon.

Discussions similaires

  1. [AC-2010] Renvoyer les dernieres dates
    Par Nana35 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/05/2013, 12h14
  2. Réponses: 11
    Dernier message: 22/03/2007, 16h45
  3. [MySQL] Requête avec les dates
    Par lusitano11 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/01/2007, 09h50
  4. Pb requête retournant les n premiers
    Par Sakalam dans le forum Access
    Réponses: 4
    Dernier message: 20/04/2006, 10h51
  5. requête avec les dates
    Par Tayhair dans le forum Access
    Réponses: 2
    Dernier message: 17/03/2006, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo