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 sql pas si difficile au final


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Par défaut Requête sql pas si difficile au final
    Bonjour, j'ai besoin de vos lumières !!

    je m'explique.

    j'ai 1 table AREA avec
    codeagence1, codeagence2, codeclient, annee, mois,chiffreaffaire

    codeagence1 n'a que 2 valeurs possibles (60000 ou 61000)
    codeagence2 de 1 à 600
    codeclient de 1 à 600
    annee de 2009 à 2012
    mois de 1 à 12
    chiffreaffaire de 0 à ....

    Je souhaite obtenir la liste des clients (codeagence1,codeagence2,codeclient) qui ont au moins 1 enregistrement en 2011 et mois>=5 (mai 2011 à maintenant) mais qui n'ont pas d'enregistrement avant ça

    on peut parler de nouveaux clients en mai 2011

    je sèche...
    merci d'avance

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ça ne semble pourtant pas difficile !
    Quelle requête as-tu essayée ?

    Commence par construire la requête simple qui retient les lignes répondant à ceci :
    qui ont au moins 1 enregistrement en 2011 et mois>=5 (mai 2011 à maintenant)
    Puis ensuite ajoute une condition NOT EXISTS avec la requête qui retire les mêmes clients mais présents avec des dates antérieures.
    Cette dernière partie est un peu plus difficile mais pas tant que ça non plus.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Par défaut
    J'ai essayé avec EXCEPT; INTERSECT
    mais je crois que je cherche trop compliqué....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select codeagence1,codeagence2,codeclient
      from area
    where annee>=2011
     
    except
     
    select codeagence1,codeagence2,codeclient  from area
    where annee<2011 and mois <=5

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT codeagence1,codeagence2,codeclient
      FROM area
    WHERE annee>=2011
    Cette première partie retient les clients présents dans la table en 2011. Elle ne répond donc que partiellement à ton besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT codeagence1,codeagence2,codeclient  FROM area
    WHERE annee<2011 AND mois <=5
    Cette seconde partie retient les clients présents dans la table avant 2011 et avant le mois de mai, c'est à dire potentiellement ceux présents de janvier à avril 2001 mais aussi ceux présents de janvier à avril 2010...

    Comme tu exclues ces derniers clients, cela veux dire que ceux présents de mai à décembre 2010 seront toujours là !

    Ma solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT DISTINCT a1.codeagence1, a1.codeagence2, a1.codeclient
    FROM AREA a1
    WHERE a1.annee = 2011
    	AND a1.mois > 4
    	AND NOT EXISTS
    	(
    		SELECT 1
    		FROM AREA a2
    		WHERE a2.codeagence1 = a1.codeagence1
    			AND a2.codeagence2 = a1.codeagence2
    			AND a2.codeclient = a1.codeclient
    			AND
    			(
    				annee < 2011
    				OR
    				(
    					annee = 2011
    					AND mois < 5
    				)
    			)
    	)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Par défaut
    Merci beaucoup !

    ta requête me convient parfaitement et j'ai tout compris
    ce n'était pas si compliqué mais je prenais le problème à l'envers....

    merci philippe

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

Discussions similaires

  1. Résultat requête SQL pas satisfaisant
    Par HULK77 dans le forum SQL
    Réponses: 6
    Dernier message: 13/10/2014, 11h23
  2. [Débutant] Requête SQL pas si simple (enfin pour moi)
    Par danielpyrenees dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2014, 01h14
  3. Problème "conceptuel" de requête SQL (pas dans leurs ecritures)
    Par Julie!!! dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/04/2008, 12h25
  4. [SQL]requête SQL pas refusée
    Par schwarzy2 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/04/2007, 23h54
  5. Réponses: 2
    Dernier message: 06/06/2005, 16h13

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