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 :

La requete select


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Par défaut La requete select
    bonjour

    je voudrais faire un select de tous les personnes qui n'ont pas acheter depuis 12mois par exemple dans une table


    sachant que la date de création et la date de paiement sont toujours le meme si la personne a fait un achat


    ça ne retourne pas le resultat que je veux

    ça retourne simplement les factures payés (les achats) qui ne sont pas entre ces deux dates alors que la personne a fait un ou des achats entre ces 2 dates

    mais le probleme c'est que la date du dernier achat d'un personne ainsi que la datedepaiement sont dans le même champs datepaiementfacture

    si ce champ est renseigné c'est que la personne a payé
    voila la structure de ma table


    personne
    id nom prenom adresse

    facture
    id libelle id_personne datecreationfacture datepaiementfacture


    jai essayé comme ça :
    Récupérer l'id de toutes les personnes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id from personne

    ensuite récupérer la date de paiement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select datepaiementfacture from personne p , facture f where f.id_personne in (id) and date paimentfacture not between '2007-07-01' and '2008'07'01'

    mais je crois que le not between n'est pas correct

    si vous avez des suggestions
    merci



    merci

  2. #2
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    En résumé, il faut que tu récupères la dernière facture de la personne et que tu testes si cette date a plus d'un an, c'est bien ça ?

    Pour une personne donnée, tu récupères la dernière date de paiement par une requête du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_personne, MAX(datepaiementfacture) AS LastDate
      FROM facture
     GROUP BY id_personne
    A partir de cette requête, via une jointure pour récupérer les informations de la personne et une clause pour tester ce LastDate par rapport à la date système, tu devrais t'en tirer

    Sinon reviens nous demander de l'aide en précisant ton SGBD, car la syntaxe des fonctions systèmes est dépendante du SGBD
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Par défaut
    merci pour votre réponse
    J'utilise le SGBd Mysql

    voila je pense trouver une solution mais je ne sais pas le traduire en langage sql

    je voudrais faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selectionner l'id de toutes les personnes  dans la table facture dont la datepaiementfacture n'existe pas entre '2007-07-01' et '2007-08-01'


    je ne sais pas si ça pourrait marché

    merci

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT p.id
    FROM personne p
    WHERE p.id NOT IN (SELECT f.id FROM facture f WHERE f.datepaiementfacture NOT BETWEEN '2007-07-01' AND '2008-07-01')
    Je construirais la requête comme ça.

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Les personnes qui n'ont pas acheté depuis un an ?
    C'est à dire les personnes pour lesquelles il n'existe pas de facture plus récente que aujourd'hui - 1 an ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT p.id
    FROM personne p  
    WHERE NOT EXISTS 
    (SELECT 1
    FROM facture f
    WHERE f.id_personne = p.id
    AND datepaimentfacture > '2008-07-01')
    Ou alors, à la jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * 
    FROM personne p LEFT OUTER JOIN facture f 
    ON p.id = f.id_personne
    AND f.datepaimentfacture > '2008-07-01'
    WHERE f.id IS NULL

  6. #6
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Par défaut
    merci pour votre réponse

    voila j'ai trouvé la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT f.id_personne, p.nom
    p.prenom, MAX( datepaiementfacture )
    FROM personne p, facture f
    WHERE p.id = f.id_personne
     
    GROUP BY f.id_personne
    HAVING MAX( datepaiementfacture ) NOT
    BETWEEN '2007-007-01'
    AND '2008-07-01'
    ORDER BY nom
    merci

  7. #7
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Salut,

    Citation Envoyé par mamyh4 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select datepaiementfacture from personne p , facture f where f.id_personne in (id) and date paimentfacture not between '2007-07-01' and '2008'07'01'
    mais je crois que le not between n'est pas correct
    Effectivement ton NOT BETWEEN n'est pas correct, je ne sais pas si c'est une erreur de frappe, mais pour la 2ieme date tu as écrit : '2008'07'01' a la place de '2008-07-01'.

    Pourquoi met tu (id), je n'ai jamais vu cette syntaxe...

    Par contre si tu pouvais préciser ton SGBD ça serait mieux...

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

Discussions similaires

  1. SQL server 7.0 requete select
    Par sangokus dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/03/2004, 11h09
  2. pbl delphi requete SELECT
    Par Rico l'abricot dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/02/2004, 09h15
  3. Requete select pour récupérer les no match entre 2 tables
    Par Celina dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/12/2003, 11h59
  4. problemes de performances avec les requetes select
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/07/2003, 13h39
  5. requete SELECT avec un nombre constant
    Par gurumeditation dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/07/2003, 20h04

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