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

SQL Firebird Discussion :

Problème requêtes imbriquées


Sujet :

SQL Firebird

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème requêtes imbriquées
    Bonjour,

    je ne suis pas un grand spécialiste de SQL mais j'ai besoin de faire un requête concernant une base clients.
    J'ai une table clients, une autre factures. Je voudrais sélectionner les clients ayant au minimum 2 factures sur une période donnée.
    J'utilise Flamerobin pour accéder à ma base.

    La requête que j'ai essayée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM CLIENTS WHERE ID IN
    (
    SELECT IDCLIENT
    FROM FACTURES
    WHERE (DATE_FACTURE BETWEEN '01.09.2009' AND '30.09.2009')
    GROUP BY IDCLIENT
    HAVING COUNT(NUM_PIECE) > 1
    )
    La sous-requête fonctionne très bien mais les 2 requêtes imbriquées me plantent flamerobin.
    Je ne doute pas d'avoir merdé quelque part, mais où ????

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bienvenue sur le forum

    n'aurait été le SELECT * FROM CLIENT j'aurais proposé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT C.NUM_CLIENT,C.RAISON_SOCIALE FROM CLIENTS C
    JOIN FACTURES F ON C.NUM_CLIENT=F.CLIENT
    WHERE F.DATE_FACTURE BETWEEN '01.05.2009' AND '31.05.2009'
    GROUP BY 1,2
    HAVING COUNT(F.NUMERO)>1
    temps 2s40 exemple réalisé sur ma propre base factures depuis 2003 environ 800 par mois

    maintenant si tu as une version permettant les CTE FIB>2.0
    pourquoi pas ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WITH SELECTION AS 
    (SELECT CLIENT,COUNT(NUMERO) AS NOMBREFACTURES FROM FACTURES 
    WHERE DATE_FACTURE BETWEEN '01.05.2009' AND '31.05.2009'
    GROUP BY 1)
    SELECT C.* FROM CLIENTS C
    JOIN SELECTION S ON C.NUM_CLIENT=S.CLIENT
    WHERE S.NOMBREFACTURES >1
    temps 1s20

    le tout étant certainement optimisable
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé la première méthode qui marche effectivement très bien.
    Ma requête prenait 38 minutes pour s'exécuter, alors descendre à 1 seconde ou 2, c'est déjà le Pérou, pour moi.
    Merci beaucoup pour ta réponse très rapide.

    Excellent week-end !!

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Dommage que tu ne puisses pas utiliser les CTE
    en tout cas un petit clic sur serait gentil
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. Problème requête imbriquée
    Par Alexandre` dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/03/2008, 10h51
  2. [MySQL] Problème requête imbriquée
    Par Little_flower dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 21/08/2007, 18h58
  3. Problème requêtes imbriquées
    Par jean-paul lepetit dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 20/03/2007, 10h32
  4. Problème Requête Imbriquée
    Par PaulPersonne820 dans le forum Hibernate
    Réponses: 1
    Dernier message: 31/01/2007, 22h40
  5. Problème Requête imbriquée
    Par EddieN dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/10/2006, 07h52

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