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

Développement SQL Server Discussion :

Problème avec "MAX" et/ou "TOP"


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut Problème avec "MAX" et/ou "TOP"
    Bonjour tout le monde,

    Je suis en plein développement mais suis un peu coincé par une requête que je ne sais pas vraiment comment formuler. Ah oui, je bosse sur MS SQL Server 2005.

    Voilà, j'ai une table qui me liste des prix d'articles.

    EX :

    Art_1 mois_1 prix
    Art_1 mois_2 prix
    Art_1 mois_5 prix
    Art_2 mois_2 prix
    Art_2 mois_9 prix
    Art_8 mois_12 prix
    ...
    ...

    Vous remarquerez qu'il n'y a pas 1 prix par mois, ce qui est normal. En effet, si au cours d'un mois le prix d'un article ne change pas, je ne créer pas de ligne supplémentaire dans ma table.

    Mon but est ici de récupérer le prix du mois le plus élevé et ce pour chaque articles de ma table, et c'est là que je me galère!

    Je ne sais pas comment écrire ma requête pour qu'elle me retourne la liste de mes articles avec leur dernier prix pratiqué. C'est sûrement con comme la lune (excusez l'expression) mais je n'arrive pas à trouver la bonne formule!

    A mon avis, je buche sur le critère qui me sélectionne la ligne dont le mois est le plus élevé. Car je veux le prix non pas pour un seul article mais pour tous les articles de ma table.....

    Pourriez-vous me donner un petit coup de pouce?

    Voili merci d'avance et bonne fin de journée à tous

    Julius

  2. #2
    Membre expérimenté
    Homme Profil pro
    /
    Inscrit en
    Février 2003
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : /

    Informations forums :
    Inscription : Février 2003
    Messages : 433
    Points : 1 607
    Points
    1 607
    Par défaut
    Ceci te donne-t-il le résultat attendu?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT 
       article, mois, max(prix)
    FROM
       TaTable
    GROUP BY
       article, mois

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Salut zaventem,

    Je ne peux pas tester ta solution maintenant car je dois partir de toute urgence... j'essaierai demain matin en arrivant au boulot..

    Merci et bonne soirée

    Julius

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Salut zaventem,

    Alors j'ai un peu regardé ta proposition, je l'ai testée mais comme je pensais cela ne fonctionne pas! De plus, je ne veux pas le prix maximum mais le prix correspondant au mois le plus récent. J'ai donc placé le max non pas sur le prix mais sur le mois mais rien à faire!

    Il doit également y avoir un hic avec le GROUP BY car je n'obtiens pas qu'un seul résultat par article!

    Je cherche toujours et accepte toujours vos propositions...

    Julius

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
       article
     , mois
     , prix
    
    FROM
       TaTable T1
    
    WHERE
            mois = (SELECT MAX(mois)
                      FROM TaTable T2
                      WHERE T1.article = T2.article)
    


    Quelque chose dans le genre...


  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    ou encore, pour éviter la jointure triangulaire :

    Dès SQL Server 2005 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH
    	CTE_DERNIERE_AFFECTATION_PRIX (article, maxMois) AS
    	(
    		SELECT article, MAX(mois)
    		FROM dbo.maTable
    		GROUP BY article
    	)
    SELECT T.article,
    		T.mois,
    		C.prix
    FROM dbo.maTable AS T
    JOIN CTE_DERNIERE_AFFECTATION_PRIX AS C
    	ON T.article = C.article
    	AND T.mois = C.maxMois
    Et dès SQL Server 2000 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT T.article,
    		T.mois,
    		C.prix
    FROM dbo.maTable T
    JOIN (
    		SELECT article, MAX(mois)
    		FROM dbo.maTable
    		GROUP BY article
    	) DRV_DERNIERE_AFFECTATION_PRIX (article, maxMois) AS D
    ON T.mois = D.maxMois
    AND T.article = D.article
    @++

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Salut elsuket,

    Genial merci pour tes lumières! J'ai tout testé et ça marche impec!

    Une bonne journée à tous

    Julius

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

Discussions similaires

  1. Problème avec les MAX
    Par Bakira dans le forum Développement
    Réponses: 5
    Dernier message: 14/11/2012, 17h11
  2. Problème avec SELECT MAX
    Par DDMALO dans le forum Langage SQL
    Réponses: 27
    Dernier message: 01/10/2008, 18h59
  3. [Requête]Problème avec requête max
    Par vcattin dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/03/2007, 15h49
  4. [MySQL] Problème avec un double quote
    Par wormseric dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2007, 14h44
  5. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59

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