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 :

Sous-requête ou pas ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Sous-requête ou pas ?
    Bonjour à tous, voici mon probleme:
    Je voudrai faire une requete sur une table contenant le détail des lignes de commandes. Dans cette table que nous appellerons T1 je voudrai récupérer la date et le numéro de la derniére commande pour chaque article.

    Table T1:
    NumCde         NumArticle      Date
    1              A1              01/01/2001
    1              A2              01/01/2001
    1              A3              01/01/2001
    1                              01/01/2001
    2              A1              01/02/2001
    2              A5              01/02/2001
    2              A6              01/02/2001
    3              A2              01/03/2001
    3              A4              01/03/2001
    3              A5              01/03/2001
    Requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Select T1.NumArticle, Max(T1.Date)
        From T1
       Where T1.NumArticle Is Not Null
    Group By T1.NumArticle
    Le résultat donne la derniére date de commande connue pour chaque article mais il me faudrait aussi le numéro de commande, et là je séche je ne sais pas comment faire pour structurer une requète SQL correcte qui me donnerai un résultat du genre :
    Article          N° Cde            Date
    A1               2                 01/02/2001
    A2               3                 01/03/2001
    A3               1                 01/01/2001
    A4               3                 01/03/2001
    A5               3                 01/03/2001
    A6               2                 01/02/2001
    Si quelqu'un peut m'aider je le remercie d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT NumCde, NumArticle, Date
    FROM table T1
    WHERE T.Date = (SELECT MAX(T2.DATE)
                             FROM table t2
                             WHERE t1.numarticle = t2.numarcticle)
    ;
    Cordialement.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Tu peux le faire avec une jointure externe:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select t1.numcde,T1.NumArticle, T1.Date
    From T1
    left outer join t1 as t2 on t2.numarticle = t1.numarticle and t2.date >= t1.date and t2.numcde > t1.numcde
    Where T1.NumArticle Is Not Null
    and t2.numcde is null

    J'ai pris pour hypothèse que le numéro de commande s'incrémente dans le temps...

    Tatayo.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par CHRISTOPHE_86 Voir le message
    Le résultat donne la derniére date de commande connue pour chaque article mais il me faudrait aussi le numéro de commande
    Qu'est-ce que vous souhaitez obtenir si un article a été vendu dans deux commandes différentes le même jour ?

    Quel est votre SGBD ?

  5. #5
    Membre à l'essai
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    J'exploite la piste donnée par ORA-007 car je suis sur une base de donnée Oracle.
    En précision pour Waldar, mon champ date est en format YYYY-MM-DD HH:MM:SS il y a donc une chronologie respectée à la seconde je l'admets mais il n'y a aucun risque pour nos commandes articles car la fréquence est plus élevée.
    Pour le moment j'ai un problème de perfo avec la requête de ORA-007 car la table possède 250 000 enregistrements et l'évaluation de la sous-requête pour chaque enregistrement plombe un peu les perfo.

    Mercredi 09h12 :
    Mauvaise nouvelle , je viens de faire le test avec l'exemple fourni par ORA-007 et en limitant la requête sur 1 seul article, mais le résultat me retourne toutes les commandes pour cet article et pas la dernière commande (celle qui a la date la plus récente).

  6. #6
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Cette requete peut repondre ton besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select A.NumCde,B.NumArticle,B.Derniere_date   
    from T1  A join         
    ( SELECT T1.NumArticle, Max(T1.Date)Derniere_date
        FROM T1
       WHERE T1.NumArticle IS NOT NULL
    GROUP BY T1.NumArticle
    )B on A.NumArticle=B.NumArticle
    bonne chance
    Feedback ...
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Sur Oracle vous pouvez utiliser la fonction FIRST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      SELECT NumArticle
           , Max(NumCde) keep (dense_rank first order by Date desc) as NumCde
           , Max(Date)                                              as DateMax
        FROM T1
       WHERE NumArticle IS NOT NULL
    GROUP BY NumArticle;

  8. #8
    Membre à l'essai
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Ok, probléme résolu par la requête de WALDAR ,merci à vous tous pour votre aide.

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

Discussions similaires

  1. [Wamp] Requête passant sous phpmyadmin mais pas en script
    Par Lordsephiroth dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 09/10/2007, 17h04
  2. [AJAX] Résultat de requête Ajax vide sous IE, mais pas sous FF
    Par brazilia28 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/09/2007, 16h18
  3. Ordonner avec une sous requête ,possible ou pas?
    Par worm1 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/02/2007, 06h23
  4. [hibernate] Ma sous-requête ne passe pas
    Par n@n¤u dans le forum Hibernate
    Réponses: 11
    Dernier message: 11/07/2006, 10h07
  5. Réponses: 2
    Dernier message: 06/06/2005, 15h13

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