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 :

Requête avec conditions


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Requête avec conditions
    Bonjour,

    Ne suis pas un crack en SQL, mais je dois faire une requête, (DB Oracle) qui me semblait apparemment simple, mais je bloque

    En gros, je dois sortir, comme on le voit sur la requête, une liste d'articles vendus auourd'hui, avec numéro, nom et eMail du client, jusque là rien de compliqué.

    La où je bloque, c'est que j'aimerais lister les articles vendus aujourd'hui (ArtNo) qui n'a pas été vendu au (au même client) les derniers 365 jours, et je n'arrive pas à trouver comment m'y prendre. On m'à parlé de sous-requêtes', mais je ne sais pas si c'est ce qu'il faut faire, j'ai fouillé pour trouver une réponse, mais sous Google j'ai de la peine à formuler ma recherche

    Alors si quelqu'un aurait ne serait-ce qu'une piste que je peux explorer, ce serait très cool
    Merci

    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 DISTINCT 
        orders.CustNo, 
        orders.ArtNr,
        customers.CustName, 
        custDetails.eMail
     
     FROM orders
         INNER JOIN customers ON orders.CustNo =  customers.CustNo
         INNER JOIN customers ON customers.CustNo = custDetails.CustNo
     
     WHERE
         orders.Date = curdate()
     
       GROUP BY  orders.CustNo, customers.CustName, customers.CustName, custDetails.eMail

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    En fait, un peu par hasard, il me semble avoir une piste, l'opérateur MINUS sous oracle (EXCEPT avec certains autres SGBD) permet d'afficher les enregistrements d'une première requête, s'ils ne sortent pas dans la 2ème requête, vais faire des tests avec ça

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 129
    Points : 38 521
    Points
    38 521
    Billets dans le blog
    9
    Par défaut
    Autre possibilité plus performante : NOT EXISTS

    MINUS ou EXCEPT va construire tout l'ensemble des commandes du client sur l'année alors que NOT EXISTS arretera la recherche dès qu'une occurrence de commande pour le client aura été trouvée

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    autre approche, sans sous requete ni jointure :

    Prendre toutes les lignes postérieures à aujourd'hui - 365 jours.
    Grouper par client+produit.
    Ne garder que ceux dont la date MIN est aujourd'hui.

Discussions similaires

  1. requete avec condition
    Par swissmade dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 13/08/2007, 11h32
  2. Requete avec condition sur une partie de l'affichage
    Par dinver78 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/07/2007, 09h19
  3. Requete avec condition interne
    Par inge2007 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/02/2007, 14h29
  4. Calculs dans une requete avec conditions multiples
    Par Sha1966 dans le forum Access
    Réponses: 3
    Dernier message: 13/01/2006, 15h18
  5. Requete avec condition
    Par Tchinkatchuk dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/06/2005, 09h37

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