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 avec MAX


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut select avec MAX
    Bonjour,

    J'ai une table MY_TABLE avec des champs appelés ID, VALUE_DATE et QUANTITY.
    Pour une VALUE_DATE donnée, j'ai par exemple plusieurs ID possibles et donc plusieurs QUANTITY.

    Ce que je veux faire, c'est une requête qui me donne, pour chaque VALUE_DATE compris entre une date de départ et une date d'arrivée, la QUANTITY dont l'ID est le plus grand

    J'avais pensé à quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      select MAX(ID), VALUE_DATE, QUANTITY
        from MY_TABLE
       where VALUE_DATE >= '01/01/2009'
         and VALUE_DATE <= '01/01/2010'
    group by VALUE_DATE, QUANTITY
    J'ai un doute sur le "group by", et aussi je ne sais pas si cette requête fait réellement ce que j'attends d'elle ^^ Si quelqu'un peut me confirmer ou me corriger, je le remercie d'avance !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Cela ne donnera pas le résultat attendu.

    Êtes-vous sûr de votre besoin : le besoin le plus courant est de chercher l'ID qui a la plus grande quantité.

    Pour vous aider, il faut d'abord écrire une première requête qui retourne le plus grand ID par date, puis effectuer une jointure avec votre même table sur ces deux colonnes afin d'aller chercher la quantité correspondante.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    Mon besoin est effectivement différent du cas courant.

    Je m'explique : l'ID correspond à un calcul, et un même identifiant donne lieu à toute une série de VALUE_DATE.

    Ce que je souhaite c'est chercher la QUANTITY pour une date donnée, sachant que si l'on trouve deux ID possibles on prendre l'ID maximum.

    Si je travaille avec une seule date donnée, par exemple la première '01/01/2009', la requete est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select QUANTITY from MY_TABLE where VALUE_DATE='01/01/2009' and CALC_ID=( select MAX(CALC_ID) from MY_TABLE where VALUE_DATE='01/01/2009' )
    Seulement je veux optimiser la recherche sur toute une plage de dates; et non pas lancer une requete pour chaque date, d'où ma question..

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ok pour la précision, mais ma réponse reste la même :
    Pour vous aider, il faut d'abord écrire une première requête qui retourne le plus grand ID par date, puis effectuer une jointure avec votre même table sur ces deux colonnes afin d'aller chercher la quantité correspondante.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    merci pour la réponse, mais n'étant pas un expert en SQL j'aimerais bien connaitre le contenu précis de cette requête... Et est-ce que ce sera au final une seule requête (complexe) ou bien une boucle puis une requête pour chaque étape de la boucle ? le but recherché étant la rapidité d'exécution.

    Par ailleurs, en testant la requête que j'ai écrite au début du message, elle semble fonctionner ...

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ce sera une seule requête, pas vraiment complexe.
    J'aurai préféré que vous trouviez tout seul cela dit, surtout que votre première requête était encourageante !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select m2.id, m2.value_date, m2.quantity
      from ( select max(id) as id_max, value_date
               from my_table
              where value_date >= '01/01/2009'
                and value_date <= '01/01/2010'
           group by value_date) m1
           inner join my_table m2 
             on m2.id         = m1.id_max
            and m2.value_date = m1.value_date

Discussions similaires

  1. select avec max
    Par hatsousse dans le forum DB2
    Réponses: 2
    Dernier message: 03/08/2012, 13h31
  2. Select avec max sur une date
    Par olibara dans le forum Requêtes
    Réponses: 10
    Dernier message: 06/07/2010, 07h18
  3. Requete select avec MAX d'une colonne.
    Par lolymeupy dans le forum Requêtes
    Réponses: 15
    Dernier message: 08/08/2008, 10h07
  4. Select Avec Max(date)
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/08/2006, 17h26
  5. [Débutant] Requête SELECT avec max et sous-requête
    Par joefou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 14h28

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