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 :

Afficher plusieurs colonnes avec fonction MAX


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Afficher plusieurs colonnes avec fonction MAX
    Bonjour,

    J'ai un problème tout bête sur lequel je m'arrache les cheveux depuis maintenant 8h...

    Je vous explique j'ai une table P avec 4 colonnes et plus ou moins 5.000 lignes :

    ID DATE DEBUT DATE FIN CODE
    1 01/01/2006 01/01/2015 600
    1 01/02/2010 01/01/2099 630
    3 01/02/2008 01/01/2014 500


    J'ai plusieurs ID avec des dates de début et de fin différentes.

    J'ai besoin de garder seulement la date de début la plus récente pour chaque ID (Mais j'ai besoin d'afficher la ligne entière et c'est là que je cale)

    J'ai donc besoin que ma requêtes me donne cette réponse :

    ID DATE DEBUT DATE FIN CODE
    1 01/02/2010 01/01/2099 630
    3 01/02/2008 01/01/2014 500


    Avec cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID, MAX(Datedebut) FROM P GROUP BY ID;
    J'arrive à afficher l'ID et sa dernière date... Donc c'est bon... Mais ou je cale, c'est là ou je veux les autres colonnes qui vont avec... et vu que j'utilise un GROUP BY... Je sèche :-(

    Je suis certains que c'est tout con mais après 8h je me tourne vers vous...

    Merci d'avance si vous pouvez m'aiguiller.

  2. #2
    Membre habitué Avatar de Razorflak
    Homme Profil pro
    Développeur Flex/AS3
    Inscrit en
    Juin 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Flex/AS3
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 97
    Points : 192
    Points
    192
    Par défaut
    Bonjour,
    j'ai posé une question similaire il y a quelque temps.
    http://www.developpez.net/forums/d13...-sql-group-by/

    J'espère que ça t'aideras.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci, je vais jeter un oeil...

    Mais entre-temps j'ai trouvé cette solution :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM P P1
    WHERE Datedebut IN 
    (SELECT MAX(Datedebut) FROM P WHERE P.ID=P1.ID GROUP BY ID) order by ID;

    Et là j'ai l'impression que ça me donne ce que je recherche... Je fais des tests pour voir si je suis bon...

    Mais merci de me répondre c'est cool :-) je me sens moins seul lol

  4. #4
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Bonjour,
    ta solution ne remontera pas les bonnes données car la date de début peut être une date de début d'une ligne sans être le maximum.
    On peut procéder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    create table p
     (id int, deb date, fin date, code int)
    GO
     
    insert into p values (1, '20060101', '20150101', 600)
    GO
    insert into p values (1, '2008-01-01', '2015-03-03', 610)
    GO
    insert into p values (3, '2010-01-01', '2015-05-05', 620)
    GO
     
     
    select p1.id, max(p1.deb) debMaxDeP
      , (select top 1 code from p p2 
         where p2.id = p1.id
             and p2.deb = (select max(deb) from p p3 where p3.id = p1.id)
         ) codeDuP
    from p p1
    group by p1.id
    qui remonte ...

    ID - DEBMAXDEP - CODEDUP

    1 2008-01-01 610
    3 2010-01-01 620

    A+

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Bonjour,
    On peut faire plus simple, en considérant que la date max, c'est celle pour laquelle il n'en existe pas de postérieure.
    Donc en SQL:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select t1.*
    from latable t1
    left outer join latable t2 on t1.id = t2.id and t1.date < t2.date
    where t2.id is null

    Tatayo.

  6. #6
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    bien vu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] créer plusieurs colonnes avec fonction a:step:c
    Par atomap dans le forum MATLAB
    Réponses: 5
    Dernier message: 25/06/2014, 10h48
  2. Afficher une colonne en fonction du max d'une autre
    Par tengac dans le forum Développement
    Réponses: 3
    Dernier message: 29/02/2012, 13h45
  3. plusieurs colonnes avec opérateur IN
    Par inluvwitiou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2006, 13h29
  4. Requête à plusieurs colonnes avec la fonction COUNT
    Par zigune dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/11/2004, 10h43
  5. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 15h22

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