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 :

Select Max pas si simple


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Select Max pas si simple
    Bonjour,

    Voici la structure de ma table :
    Date, champ2, champ3, champ4

    Je veux faire une requête qui me ramène les lignes ou la date est la plus récente pour chaque couple (champ2, champ3).

    Je parviens à la faire de cette facon :
    SELECT MAX(Date), champ2, champ3
    FROM Table
    GROUP BY champ2, champ3

    mais je n'ai pas la valeure du champ 4 qui est importante pour moi ...

    Merci pour votre aide

    Sylvain.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Pour obtenirla valeur de champ4, il faut également l'inclure dans SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(Date), champ2, champ3, champ4
    FROM 'Table'
    GROUP BY champ2, champ3

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Je ne pense pas que la solution de jeremya va marcher, le compilateur oracle va gueuler en disant que champ4 n'est pas dans le group by

    Ma solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT Date,champ2,champ3,champ4
    FROM 'Table'
    WHERE (Date,champ2,champ3) = (
      SELECT MAX(Date) as "Date",champ2,champ3
      FROM 'Table'
      GROUP BY champ2,champ3 )
    Attention toutefois, cette requête est susceptible de retourner plusieurs lignes pour chaque couple (champ2,champ3) si les dates ne sont pas uniques pour ces couples...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse, mais j'ai testé cette solution avec la requête suivante :

    select Date,champ2, champ3,champ4
    FROM Table
    where (Date,champ2, champ3) = (SELECT MAX(Date) as Date, champ2, champ3 FROM Table GROUP BY champ2, champ3)

    et j'obtiens l'erreur suivante :
    Serveur*: Msg 170, Niveau 15, État 1, Ligne 3
    Ligne 3 : syntaxe incorrecte vers ','.

    Pour information, je suis sous SQL Server 2000

    Sylvain.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Solution
    En fait, je viens de trouver la solution en me basant sur une ancienne discussion du forum ...

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select t1.Date,t1.champ2,t1.champ3,t1.champ4
    FROM Table t1
    inner join (SELECT MAX(Date)as Date, champ2, champ3
    	    FROM Table
    	    GROUP BY champ2, champ3) t2
    on (t1.Date = t2.Date)
    and (t1.champ2 = t2.champ2)
    and (t1.champ3 = t2.champ3)
    Merci à ceux qui se sont penchés sur mon problème

    Sylvain

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Citation Envoyé par Vinchou
    Je ne pense pas que la solution de jeremya va marcher, le compilateur oracle va gueuler en disant que champ4 n'est pas dans le group by
    En effet, la solution que j'ai proposé ne fonctionne pas avec certains SGBDR.
    Mais comme dans son message de départ, sylvain3504 n'avait pas précisé avec quel SGBDR il travaille, j'ai founi une solution simple en SQL.

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

Discussions similaires

  1. [MySQL] SELECT MAX ne fonctionne pas.
    Par Kiwix dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/12/2010, 13h12
  2. [SQL Server] select max ne retourne pas la bonne valeur
    Par *alexandre* dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/09/2008, 15h49
  3. Order by et select * , pas si simple ?
    Par bpriscil dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/06/2007, 12h46
  4. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 15h39
  5. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 18h36

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