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 requette sql je pense ?


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Sous requette sql je pense ?
    Bonjour
    J'ai 2 tables jointes
    Table CLT (coordonnées des clients)
    champs NOM, PRENOM, CPOSTAL etc

    Table TOP (enregistre la date de visite et leurs commandes a chaque viste)
    Champs DAT_VIS etc

    Je voudlais faire une requete qui me ressorte uniquement le nom des clients qui sont venus par exemple entre le 1 OCT 2003 et le 31 DEC 2003 ET qui ne sont pas revenus en 2004 et 2005

    Je pense qu'il Il faut qu'il donne d'abord ceux qui sont venu entre 1 OCT 2003 et le 31 DEC 2003 et qu'il verifie qu'il ne sont pas venue après
    J'ai fait cette requete mais elle trie bien les dates de visites donc je pense qu'elles me sort les bonnes dates de visites
    Mais ce que je voudrais c'est qu'elles me donne le nom des clients qui ont une date de visites entre le
    1 OCT 2003 et le 31 DEC 2003 ET qu'il verifie qu'il ne sont pas venue en 2004 et 2005 donc je pense qu'il faut une sous requete mais je ne sais pas faire
    J'ai fait ca ca me sort bien les bonnes dates de visites concernées mais j'ai des noms de personnes qui sont revenus en 2004 ou 2005 donc c faut
    Il elimine les dates de visites je pense mais pas le nom des gens
    Merci si qq peut m'expliquer comment faire

    SELECT CLT.NOM,CLT.ADR1,CLT.CPOSTAL, TOP.DAT_VIS

    FROM CLT, TOP

    'jointures
    WHERE (CLT.SOC = TOPSOC)
    AND (CLT.MAG = TOP.MAG)
    AND (CLT.FAMILLE = TOP.FAMILLE)

    'Conditions
    AND ((TOP.DAT_VIS BETWEEN '20031101' AND '20031231')
    AND (TOP.DAT_VIS NOT BETWEEN '20040101' AND '20051231'));

    merci

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Tu peux essayer les requêtes suivantes, la première est moins lisible, mais devrait être plus performante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT CLT.NOM, CLT.ADR1, CLT.CPOSTAL, a.DAT_VIS 
    FROM CLT INNER JOIN TOP a ON CLT.SOC = a.TOPSOC 
                             AND CLT.MAG = a.MAG 
                             AND CLT.FAMILLE = a.FAMILLE 
                             AND a.DAT_VIS BETWEEN '20031101' AND '20031231'
             LEFT  JOIN TOP b ON CLT.SOC = b.TOPSOC 
                             AND CLT.MAG = b.MAG 
                             AND CLT.FAMILLE = b.FAMILLE 
                             AND b.DAT_VIS BETWEEN '20040101' AND '20051231'
    WHERE b.TOPSOC IS NULL;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CLT.NOM, CLT.ADR1, CLT.CPOSTAL, a.DAT_VIS 
    FROM CLT INNER JOIN TOP a ON CLT.SOC = a.TOPSOC 
                             AND CLT.MAG = a.MAG 
                             AND CLT.FAMILLE = a.FAMILLE 
                             AND a.DAT_VIS BETWEEN '20031101' AND '20031231'
    WHERE CLT.SOC NOT IN (SELECT a.SOC
                          FROM SOC s, TOP b 
                          WHERE s.SOC     = b.TOPSOC 
                            AND s.MAG     = b.MAG 
                            AND s.FAMILLE = b.FAMILLE 
                            AND b.DAT_VIS BETWEEN '20040101' AND '20051231')
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Plus performant :

    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
    CREATE Table CLT (NUM INT, NOM VARCHAR(12))
     
    INSERT INTO CLT VALUES (1, 'dupon') 
    INSERT INTO CLT VALUES (2, 'duran') 
     
    CREATE Table T0P (NUM INT, DAT_VIS DATETIME)
     
    INSERT INTO T0P VALUES (1, '2003-12-01')
    INSERT INTO T0P VALUES (2, '2005-01-01')
    INSERT INTO T0P VALUES (2, '2003-11-01')
     
    SELECT CLT.*
    FROM   CLT 
           INNER JOIN T0P T ON CLT.NUM = T.NUM
    WHERE  DAT_VIS BETWEEN '2003-10-01' AND '2003-12-31'
      AND  NOT EXISTS (SELECT *
                       FROM   T0P T2
                       WHERE  T2.NUM = T.NUM
                         AND  T2.DAT_VIS BETWEEN '2004-01-01' AND '2005-12-31')
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Super merci
    Je ne connaissais pas not in et avec ca j'ai pu faire qq choses merci a tous

  5. #5
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    N'oubli pas le tag résolu.
    Merci

Discussions similaires

  1. [AC-2010] requette sql sous access
    Par subzero01 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/08/2011, 18h01
  2. requette sql sous linux
    Par Isa-Bella dans le forum Autres
    Réponses: 2
    Dernier message: 26/02/2010, 09h54
  3. Requette SQL Chaines +Fonction Format()sous ACCESS
    Par sami117 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/11/2008, 09h22
  4. requette sql qui passe sous oracle 9i mais pas en 8i
    Par maxidoove dans le forum Oracle
    Réponses: 3
    Dernier message: 21/10/2005, 10h59
  5. requette sql compliqué sous delphi
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 16h33

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