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

Langage SQL Discussion :

min(date) pour chaque patient


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut min(date) pour chaque patient
    Bonjour,

    Je bloque depuis maintenant un tres gros moment sur une requete qui au depart ne me semblait pas bien compliquée...
    Voici ma table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    IDPatient         Profil            Datemodif
    1                 profil 1          04/05/2005
    1                 profil 4          05/05/2005
    1                 profil 2          06/05/2005
    2                 profil 1          05/05/2005 
    2                 profil 3          10/05/2005
    4                 profil 2          08/05/2005
    4                 profil 1          12/05/2005
    4                 profil 3          13/05/2005
    4                 profil 4          20/05/2005
    Je souhaite recuperer pour chaque patient le tuple complet correspondant à la premiere date. Le resultat escompté sur l'exemple est donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    IDPatient         Profil            Datemodif
    1                 profil 1          04/05/2005
    2                 profil 1          05/05/2005 
    4                 profil 2          08/05/2005
    Avez vous une piste qui pourrait m'aider : je pense que la requete en elle meme ne doit pas etre compliquée mais je dois passer a coté d'une notion ...
    edit : dans le resultat la troisieme colone m'importe peu, l'important est d'avoir pour chaque patient le profil qui a été suivi en premier chronologiquement

    Aurélien

  2. #2
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Bonjour,
    Voilà deux solutions possibles, quel est votre SGBD ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT
      IDPATIENT,
      first_value(Profil) over(PARTITION BY IDPATIENT ORDER BY Datemodif) AS Profil,
      first_value(Datemodif) over(PARTITION BY IDPATIENT ORDER BY Datemodif) AS Datemodif
    FROM ma_table
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ma_table.* 
      FROM
        (SELECT IDPatient, MIN(Datemodif) AS Datemodif FROM ma_table GROUP BY IDPatient) sel_date
    	inner join ma_table ON sel_date.IDPatient = ma_table.IDPatient AND sel_date.Datemodif = ma_table.Datemodif

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    Bonjour,

    Excusez moi effectivement j'ai oublié de preciser le sgbd utilisé : sqlserver 2000
    Je vais tester cela.

  4. #4
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    J'ai eu quelques soucis pour dapater ces requets pour sqlserver mais je suis qd meme arrivé au résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select distinct idpatient, profil
    from ma_table
    where datemodif in
                             (select min(datemodif) 
                             from ma_table 
                             group by idpatient)

  5. #5
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    ?? Avec votre jeu de test, cette requete ne vous renvoie-t-elle pas 2 lignes pour le patient 1 ?

    sous SQL Server 2000, il me semble que celle ci devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT ma_table.* 
      FROM
        (SELECT IDPatient, MIN(Datemodif) AS Datemodif FROM ma_table GROUP BY IDPatient) as sel_date,
        ma_table 
      WHERE
        sel_date.IDPatient = ma_table.IDPatient 
        AND sel_date.Datemodif = ma_table.Datemodif

  6. #6
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    merci encore de votre aide. Je vais tester cette nouvelle requete . Celle que j'ai posté au dessus fonctionne correctement et ne renvoit pas deux lignes pour le premier patient (j'ai fait la verification : on est jamais trop prudent)

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/07/2012, 13h33
  2. manipulation de date pour chaque jour du mois
    Par renardchan dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/06/2011, 22h00
  3. Réponses: 7
    Dernier message: 05/10/2010, 11h19
  4. Réponses: 1
    Dernier message: 15/08/2010, 16h03
  5. Réponses: 16
    Dernier message: 03/06/2009, 05h14

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