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

Access Discussion :

requete selection sur date


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut requete selection sur date
    Bonjour,
    J'ai un pb sur un tri de date. je m'explique.
    j'ai une table 1 ou sont stockées des données nominatives et dans une seconde table sont stockées plusieurs dates correspondant à 1 seul enregistrement en table 1.
    Ma difficulté est que je souhaite avoir une requete qui prennent en compte les dates > à 1an (paramètre date()-365) mais il m'affiche également les plus anciennes alors qu 'il me faut la dernière date:
    exemple:
    toto --> 15/10/2003
    toto --> 24/11/2004
    toto --> 11/01/2005
    toto --> 16/10/2006
    Par rapport à la date d'aujourd'hui, j'aurais souhaité qu'il ne me retourne que la 3ème date : 11/01/2005.
    Merci de vos idées.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    Quel est ton critère exact ? Supérieur à 1 an, mais quel est la limite la plus récente ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    les critères de dates concernent les derniers enregistrement de dates et qui sont supérieur à 1 an.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    Citation Envoyé par otaquet
    Par rapport à la date d'aujourd'hui, j'aurais souhaité qu'il ne me retourne que la 3ème date : 11/01/2005.
    Donc ce que tu as écrit ci-dessus n'est pas vrai ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Si mais je me suis peut etre mal exprimé.
    je souhaite avoir les dates supérieurs à 1 an (donc dans mon exemple, les 3 premières dates de 2003, 2004 et 2005) mais ma requete ne doit prendre en compte à la sortie que la plus récente des supérieurs à 1 an (soit dans l'exemple : 11/01/2005)
    j'espère avoir été plus clair.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Dans ce cas là pourquoi tu ne rajoute pas MAX comme cela il te resort la date la plus récente.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    J'ai également pensé à Max, mais j'ai pas réussi...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    ok mais ou est ce que je positionne la fonction d'agrégat max ?

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Select Max (chp1)
    From tb1
    Where chp1 < (date()-365);

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    après test il affiche le message suivant:
    "Vous avez essayé d'éxecuter une requete ne comprenant pas l'expression spécifiée 'nom' comme une partie de la fonciton d'agrégat"
    voici la requete lancée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Tmdt.nom, Tmdt.prenom, Tmdt.affectation, Tmdt.present_parti, Tconsultation.type_consultation, Max(Tconsultation.date_consultation)
    FROM Tmdt INNER JOIN Tconsultation ON Tmdt.numero = Tconsultation.num_agent
    WHERE (((Tmdt.present_parti)=Yes) AND ((Tconsultation.date_consultation)>(Date()-365)));

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Essaye ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Table1.nom, Table1.prenom, Table1.affectation, Table1.present_parti, Table1.type_consultation,Table1.date_consultation
    FROM Table1
    WHERE Tmdt.present_parti=Yes
    AND Table1.date_consultation=
    (SELECT  Max(Table1.date_consultation) AS MaxDedate_consultation
    FROM Table1
    WHERE (Table1.date_consultation<Date()-365));

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    ça n'a pas l'air de fonctionner car il me retourne 2 enregistrements au lieu d'environ 300...

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    D'après ton exemple,

    toto --> 15/10/2003
    toto --> 24/11/2004
    toto --> 11/01/2005
    toto --> 16/10/2006
    Tu voulais unique qu'il te renvoie l'occurence toto --> 11/01/2005

    Ma sous requête va récupérer la valeur maximum d'après la condition
    Table1.date_consultation<Date()-365

    Celle-ci va renvoyer 11/01/2005

    Puis ma requête principale va selectionner tous les champs dont la date de consultation est égale à 11/01/2005.

    Ce n'est pas ce que tu voulais ???

  14. #14
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    si c'est presque ça à savoir que :
    La sous requête va récupérer la valeur maximum d'après la condition
    Table1.date_consultation<Date()-365
    Celle-ci va renvoyer 11/01/2005

    Je suis d'accord, on récupère le dernier enregistrement > à 1 an.
    Mais la requete principale ne doit pas selectionner tous les champs dont la date de consultation est égale à 11/01/2005.
    La requete principale doit selectionner toutes les personnes (tous les enregistrements) pour lesquels le dernier enregistrement date de consultation est > à 1 an.

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Tu viens de dire la solution dans ta démonstration.

    La requete principale doit selectionner toutes les personnes (tous les enregistrements) pour lesquels le dernier enregistrement date de consultation est > à 1 an
    Ce qui va donc donner à mon avis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Table1.nom, Table1.prenom, Table1.affectation, Table1.present_parti, Table1.type_consultation,Table1.date_consultation
    FROM Table1
    WHERE Tmdt.present_parti=Yes
    AND Table1.date_consultation >
    (SELECT  Max(Table1.date_consultation) AS MaxDedate_consultation
    FROM Table1
    WHERE (Table1.date_consultation<Date()-365));
    Mais celle-ci reviens au même que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Table1.Nom, Table1.Prénom, Table1.affectation, Table1.present_parti, Table1.type_consultation, Table1.date_consultation
    FROM Table1
    WHERE (((Table1.date_consultation)>Date()-365));

  16. #16
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    si j'utilise cette requete (qui contient 2 tables à l'origine :1table pour les noms et une table pour les dates):

    [QUOTE=tazmania]:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Table1.nom, Table1.prenom, Table1.affectation, Table1.present_parti, Table2.type_consultation,Table2.date_consultation
    FROM Table1
    WHERE Tmdt.present_parti=Yes
    AND Table2.date_consultation >
    (SELECT  Max(Table2.date_consultation) AS MaxDedate_consultation
    FROM Table2
    WHERE (Table2.date_consultation<Date()-365));
    je n'obtiens pas toutes les réponses souhaitées : exemple

    toto | titi | tutu | tata
    15/10/2003 | 20/12/2004 | 15/10/2004 | 24/07/2002
    24/11/2004 | 31/03/2006 | | 03/03/2005
    11/01/2005 | |
    16/10/2006 | |

    La requete devrait retournée :
    - aucun enregistrement pour toto
    - aucun enregistrement pour titi
    - 1 enregistrement pour tutu : 15/10/2004
    - 1 enregistrement pour tata : 03/03/2005

    c'est moi qui me suis mal exprimé.

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Peux tu me faire voir la structure de la table1 et la table2.
    Existe-t-il une relation entre ces deux tables ?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut la voici
    voici la relation entre les 2 tables.

    Nom : relations.jpg
Affichages : 202
Taille : 62,9 Ko

  19. #19
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 26
    Points
    26
    Par défaut structures
    et les structures :
    table 1:
    numero : cle primaire
    nom : texte 50
    prenom : texte 50
    affectation : texte 50
    fonction : texte 50
    present_parti : oui/non

    table2:
    numero : cle primaire
    date_consultation : Date/heure (format date abrégée avec masque de saisie)
    type_consultation : texte 50
    num_agent : numérique entier long (avec doublons)

  20. #20
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Comprends pas là ???
    Tu veux que le résultat soit

    toto | titi | tutu | tata
    15/10/2003 | 20/12/2004 | 15/10/2004 | 24/07/2002
    24/11/2004 | 31/03/2006 | | 03/03/2005
    11/01/2005 | |
    16/10/2006 | |

    La requete devrait retournée :
    - aucun enregistrement pour toto
    - aucun enregistrement pour titi
    - 1 enregistrement pour tutu : 15/10/2004
    - 1 enregistrement pour tata : 03/03/2005
    Alors que tu disait précédement :

    La requete principale doit selectionner toutes les personnes (tous les enregistrements) pour lesquels le dernier enregistrement date de consultation est > à 1 an.
    Si on relance ma sous requête pour ce cas-ci, elle va renvoyait 03/03/2005.
    La requête devrait donc renvoyer :
    - 1 enregistrement pour toto : 16/10/2006
    - 1 enregistrement pour titi : 31/03/2006
    - aucun enregistrement pour tutu
    - 1 enregistrement pour tata : 03/03/2005 (si on a mis >=)

    J'obtiens bien tous les enregistrements pour lesquels le dernier enregistrement date_consultation est > à 1 an

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requetes sql sur DATE (selection d'une période)
    Par Ma2x. dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/01/2010, 18h25
  2. Requete Selection Sur Date
    Par otaquet dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/11/2006, 11h57
  3. Requete SELECT SUR +sieurs tables
    Par yanis97 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/09/2006, 13h30
  4. [Conception] Select sur date inopérant
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/09/2006, 09h33
  5. requete select avec date
    Par druglord dans le forum Requêtes
    Réponses: 9
    Dernier message: 07/08/2006, 10h47

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