Requêtes sql en Access avec dates
Dernière réponse : dans Programmation
Bonsoir,
Voila j'ai un problème, je n'arrive pas selectionner tous les champs d'une table
en selectionnant un enregistrement parmis plusieurs enregistrements propre à un même ID.
Et ça en fonction de la date la plus récente.
Je m'explique, j'ai deux tables:
TBL_ENQUETES :
ID_ENQUETE ID_CONTACT ID_ASOCIALE ENQ_DATE ENQ_CAT
2 19 2665 1/11/1995 1
3 20 2665 1/11/1996 2
4 21 2663 1/12/1996 2
5 2 2665 1/01/1997 3
6 19 2661 6/11/1998 1
7 11 2665 1/11/1998 1
8 10 2665 7/12/1998 2
9 3 2665 1/04/1999 1
10 4 2665 1/10/1999 1
11 10 2662 1/11/1999 3
12 10 2665 15/11/1999 2
TBL_CONTACTS :
ID_CONTACT CONT_debut CONT_fin
2 1/11/1996
3 11/12/1996 1/11/1998
4 1/11/1997
5 4/11/1997 3/12/1998
6 1/10/1998
7 4/04/1999
8 1/10/1999 1/11/1999
9 1/11/1999
10 12/11/1999 1/11/2000
11 7/06/2000
12 13/04/2001
Chaque ENquête est unique mais peut representer un même contact.
Comment faire pour selectionner le dernier enregistrement (en date )
d'une enquête parmis les eventuels autres enquêtes qu'aurait pu avoir une
même personne et afficher aussi le champ ID_ENQUETE?
Rmq: Il s'agit des contacts dont le champ CONT_fin est nul.
J'ai un code sql:
SELECT TBL_ENQUETES.ID_CONTACT, Max(TBL_ENQUETES.ENQ_DATE) AS ENQ_DATE
FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES ON TBL_CONTACTS.ID_CONTACT = TBL_ENQUETES.ID_CONTACT
GROUP BY TBL_ENQUETES.ID_CONTACT;
Il me sort les enregistrements des dernières dates mais je n'arrive pas
à faire apparaitre le champ ID_ENQUETE associé ?
un autre code:
SELECT TBL_ENQUETES.ID_ENQUETE, TBL_ENQUETES.ID_CONTACT, Max(TBL_ENQUETES.ENQ_DATE) AS ENQ_DATE
FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES ON TBL_CONTACTS.ID_CONTACT = TBL_ENQUETES.ID_CONTACT
GROUP BY TBL_ENQUETES.ID_CONTACT;
mais j'obtient message d'erreur (agregat...)
Comment faire, pouvez vous m'aider?
Pour la suite:
-Je devrais comparer ces dates à la date d'aujourd' hui
et donc calculer une difference de temps et en fonction de la categorie
enquête (ENQ_CAT) si cette difference est supérieur à 6 mois ou 1 an
faire un message d'alerte pour faire une nouvelles equête pour les contacts
concernés.
-Ensuite par regroupement envoyer le résultats avec les coordonnées et
dernière date d'enquête des personnes vers un rapport pour Inmpression.
Merci beaucoup
Voila j'ai un problème, je n'arrive pas selectionner tous les champs d'une table
en selectionnant un enregistrement parmis plusieurs enregistrements propre à un même ID.
Et ça en fonction de la date la plus récente.
Je m'explique, j'ai deux tables:
TBL_ENQUETES :
ID_ENQUETE ID_CONTACT ID_ASOCIALE ENQ_DATE ENQ_CAT
2 19 2665 1/11/1995 1
3 20 2665 1/11/1996 2
4 21 2663 1/12/1996 2
5 2 2665 1/01/1997 3
6 19 2661 6/11/1998 1
7 11 2665 1/11/1998 1
8 10 2665 7/12/1998 2
9 3 2665 1/04/1999 1
10 4 2665 1/10/1999 1
11 10 2662 1/11/1999 3
12 10 2665 15/11/1999 2
TBL_CONTACTS :
ID_CONTACT CONT_debut CONT_fin
2 1/11/1996
3 11/12/1996 1/11/1998
4 1/11/1997
5 4/11/1997 3/12/1998
6 1/10/1998
7 4/04/1999
8 1/10/1999 1/11/1999
9 1/11/1999
10 12/11/1999 1/11/2000
11 7/06/2000
12 13/04/2001
Chaque ENquête est unique mais peut representer un même contact.
Comment faire pour selectionner le dernier enregistrement (en date )
d'une enquête parmis les eventuels autres enquêtes qu'aurait pu avoir une
même personne et afficher aussi le champ ID_ENQUETE?
Rmq: Il s'agit des contacts dont le champ CONT_fin est nul.
J'ai un code sql:
SELECT TBL_ENQUETES.ID_CONTACT, Max(TBL_ENQUETES.ENQ_DATE) AS ENQ_DATE
FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES ON TBL_CONTACTS.ID_CONTACT = TBL_ENQUETES.ID_CONTACT
GROUP BY TBL_ENQUETES.ID_CONTACT;
Il me sort les enregistrements des dernières dates mais je n'arrive pas
à faire apparaitre le champ ID_ENQUETE associé ?
un autre code:
SELECT TBL_ENQUETES.ID_ENQUETE, TBL_ENQUETES.ID_CONTACT, Max(TBL_ENQUETES.ENQ_DATE) AS ENQ_DATE
FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES ON TBL_CONTACTS.ID_CONTACT = TBL_ENQUETES.ID_CONTACT
GROUP BY TBL_ENQUETES.ID_CONTACT;
mais j'obtient message d'erreur (agregat...)
Comment faire, pouvez vous m'aider?
Pour la suite:
-Je devrais comparer ces dates à la date d'aujourd' hui
et donc calculer une difference de temps et en fonction de la categorie
enquête (ENQ_CAT) si cette difference est supérieur à 6 mois ou 1 an
faire un message d'alerte pour faire une nouvelles equête pour les contacts
concernés.
-Ensuite par regroupement envoyer le résultats avec les coordonnées et
dernière date d'enquête des personnes vers un rapport pour Inmpression.
Merci beaucoup
Autres pages sur : requetes sql access dates
Lassé par la pub ? Créez un compte
bonjour Alibuzzer
votre message sur tom's guide date de 2006 et peut être avez vous trouver la réponse.
Je recherche à faire la même requete, si vous avez trouver la solution pourriez vous m'aider ?
je dois dans une requete qui contient plusieurs fois le meme id contact et plusieurs dates retrouver l'enregistrement de la date la plus ancienne. C'est exactement ce que vous aviez demander à l'époque.
Merci d'avance
votre message sur tom's guide date de 2006 et peut être avez vous trouver la réponse.
Je recherche à faire la même requete, si vous avez trouver la solution pourriez vous m'aider ?
je dois dans une requete qui contient plusieurs fois le meme id contact et plusieurs dates retrouver l'enregistrement de la date la plus ancienne. C'est exactement ce que vous aviez demander à l'époque.
Merci d'avance
Par rapport à sa dernière requête, il fallait peut-être déplacer la fonction d'agrégation Max(...) dans un HAVING.
http://msdn.microsoft.com/en-us/library/66dhb85f(VS.80).aspx#fogrfconsiderationsforsqlselectstatementsanchor2
(non testé)
http://msdn.microsoft.com/en-us/library/66dhb85f(VS.80).aspx#fogrfconsiderationsforsqlselectstatementsanchor2
SELECT TBL_ENQUETES.ID_ENQUETE, TBL_ENQUETES.ID_CONTACT, TBL_ENQUETES.ENQ_DATE AS ENQ_DATE FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES ON TBL_CONTACTS.ID_CONTACT = TBL_ENQUETES.ID_CONTACT GROUP BY TBL_ENQUETES.ID_CONTACT HAVING Max(TBL_ENQUETES.ENQ_DATE);
(non testé)
Merci pour votre réponse mais ca ne fonctionne pas
vois ma requete
Je n'arrive pas à écrire le HAVING en question, lorsque je l'ajoute directement dans le sql, il me répond qu'il manque un opérateur
merci CRicky
isabelle
vois ma requete
SELECT T_CONTRAT.ID_CONTRAT, T_SITE.SITE, T_SOUSTRAITANT.SOUSTRAITANT, Max(T_DEMANDE_DOCS.DEMANDE_DOCS_DU) AS MaxDeDEMANDE_DOCS_DU, IIf([DKBIS]=Yes,"ATTENTE ST",[CKBIS]) AS VKBIS, IIf([DURSSAF]=Yes,"ATTENTE ST",[CURSSAF]) AS VURSSAF, IIf([DQUALIF]=Yes,"ATTENTE ST",[CQUALIFREF]) AS VQUALIFREF, IIf([D3666DC7]=Yes,"ATTENTE ST",[C3666_OU_DC7]) AS V3666_OU_DC7, IIf([DCP]=Yes,"ATTENTE ST",[CCONGES_PAYES]) AS VCONGES_PAYES, IIf([DDHONNEUR]=Yes,"ATTENTE ST",[CD_HONNEUR]) AS VD_HONNEUR, IIf([DAHONNEUR]=Yes,"ATTENTE ST",[CA_HONNEUR]) AS VA_HONNEUR FROM (T_CONTRAT_SITE INNER JOIN (T_SOUSTRAITANT INNER JOIN (T_SITE INNER JOIN (T_CONTRAT INNER JOIN R_FPAPIER ON T_CONTRAT.ID_CONTRAT = R_FPAPIER.ID_CONTRAT) ON T_SITE.ID_SITE = R_FPAPIER.ID_SITE) ON (T_SOUSTRAITANT.ID_SOUSTRAITANT = T_CONTRAT.ID_SOUSTRAITANT) AND (T_SOUSTRAITANT.ID_SOUSTRAITANT = R_FPAPIER.ID_SOUSTRAITANT)) ON (T_CONTRAT.ID_CONTRAT = T_CONTRAT_SITE.ID_CONTRAT) AND (T_SITE.ID_SITE = T_CONTRAT_SITE.ID_SITE) AND (T_CONTRAT_SITE.ID_CONTRAT_SITE = R_FPAPIER.ID_CONTRAT_SITE)) INNER JOIN T_DEMANDE_DOCS ON T_CONTRAT_SITE.ID_CONTRAT_SITE = T_DEMANDE_DOCS.ID_CONTRAT_SITE GROUP BY T_CONTRAT.ID_CONTRAT, T_SITE.SITE, T_SOUSTRAITANT.SOUSTRAITANT, IIf([DKBIS]=Yes,"ATTENTE ST",[CKBIS]), IIf([DURSSAF]=Yes,"ATTENTE ST",[CURSSAF]), IIf([DQUALIF]=Yes,"ATTENTE ST",[CQUALIFREF]), IIf([D3666DC7]=Yes,"ATTENTE ST",[C3666_OU_DC7]), IIf([DCP]=Yes,"ATTENTE ST",[CCONGES_PAYES]), IIf([DDHONNEUR]=Yes,"ATTENTE ST",[CD_HONNEUR]), IIf([DAHONNEUR]=Yes,"ATTENTE ST",[CA_HONNEUR]), T_CONTRAT_SITE.ID_SITE;
Je n'arrive pas à écrire le HAVING en question, lorsque je l'ajoute directement dans le sql, il me répond qu'il manque un opérateur
merci CRicky
isabelle
bonsoir,
j'y suis de depuis ce matin et je ne m'en sors pas...
en fait il n'y a pas d'erreur retournée mais il ne me renvoit pas juste la ligne de la demande la plus récente
comme j'ai des conditions vrai faux dans vkbis vurssaf etc... il me rajoute toutes les lignes
En fait j'enregistre la date du kbis du sous traitant dans la T_SOUSTRAITANT
Le kbis n'est valable que 6 mois aussi en fonction du chantier qu'il va faire, j'effectue un calcul (très savant)
pour qu'il affiche, "ok", ou "à renouveler" c'est le champ [ckbis] avec (c pour calcul) 'dans une requete
puis je demande au sous traitant via une demande de docs (si son kbis est périmé) en cochant une autre case nommée 'dkbis' (d pour demande) - il peut y avoir plusieurs demandes, mais celle qui m'intéresse est la plus récente
Je reprends l'ensemble Kbis, ckbis et dkbis dans une requete et Si [dkbis] est coché, je demande dans un champ calcul [Vkbis] (v pour validation) d'afficher "En Attente St", ou la valeur de ckbis
Il se peut donc que la valeur de ckbis passe de "ok" à "a renouveler" dans l'intervalle entre ma dernière demande et aujourd'hui. C'est cela que je veux surveiller.
dans ma requete je souhaite afficher si le kbis est à renouveler entre ma dernière demande de docs et aujourd'hui (car il arrive souvent que le sous traitant mette du temps à renvoyer ses documents) et de m'avertir en affichant les documents à renouveler que je n'aurais pas demander
malheureusement je pense qu'il faut que je lui indique que je veux la date de la dernière demande dans le critére de la requete (dans la grille opération) j'ai essayé avec max, mais ca ne fonctionne toujours pas
désolée d'avoir été si longue et merci à toi
c'est le meme procédé pour urssaf, congés payés....
est ce que tu comprends ce que je veux expliquer ?
j'y suis de depuis ce matin et je ne m'en sors pas...
en fait il n'y a pas d'erreur retournée mais il ne me renvoit pas juste la ligne de la demande la plus récente
comme j'ai des conditions vrai faux dans vkbis vurssaf etc... il me rajoute toutes les lignes
En fait j'enregistre la date du kbis du sous traitant dans la T_SOUSTRAITANT
Le kbis n'est valable que 6 mois aussi en fonction du chantier qu'il va faire, j'effectue un calcul (très savant)
pour qu'il affiche, "ok", ou "à renouveler" c'est le champ [ckbis] avec (c pour calcul) 'dans une requetepuis je demande au sous traitant via une demande de docs (si son kbis est périmé) en cochant une autre case nommée 'dkbis' (d pour demande) - il peut y avoir plusieurs demandes, mais celle qui m'intéresse est la plus récente
Je reprends l'ensemble Kbis, ckbis et dkbis dans une requete et Si [dkbis] est coché, je demande dans un champ calcul [Vkbis] (v pour validation) d'afficher "En Attente St", ou la valeur de ckbis
Il se peut donc que la valeur de ckbis passe de "ok" à "a renouveler" dans l'intervalle entre ma dernière demande et aujourd'hui. C'est cela que je veux surveiller.
dans ma requete je souhaite afficher si le kbis est à renouveler entre ma dernière demande de docs et aujourd'hui (car il arrive souvent que le sous traitant mette du temps à renvoyer ses documents) et de m'avertir en affichant les documents à renouveler que je n'aurais pas demander
malheureusement je pense qu'il faut que je lui indique que je veux la date de la dernière demande dans le critére de la requete (dans la grille opération) j'ai essayé avec max, mais ca ne fonctionne toujours pas
désolée d'avoir été si longue et merci à toi
c'est le meme procédé pour urssaf, congés payés....
est ce que tu comprends ce que je veux expliquer ?
C'est ce que j'ai fait je viens de trouver à l'instant
j'ai regrouper tout mes champs à renouveler dans un seul avec dans la requete
si kbis est à renouveler, alors " renouveler", si urssaf est à renouveler alors "renouveler".....
et j'ai refait un max sur la date
eh bien, il en aura fallu du temps
mais n'est_il pas possible de faire une rechdom par exemple sur la date et l'écrire dans le critère ?
je pense que cela aurait été plus simple non ?
pb c'est que je ne sais pas l'écrire
merci de ton encouragement et ton aide
j'ai regrouper tout mes champs à renouveler dans un seul avec dans la requete
si kbis est à renouveler, alors " renouveler", si urssaf est à renouveler alors "renouveler".....
et j'ai refait un max sur la date
eh bien, il en aura fallu du temps
mais n'est_il pas possible de faire une rechdom par exemple sur la date et l'écrire dans le critère ?
je pense que cela aurait été plus simple non ?
pb c'est que je ne sais pas l'écrire
merci de ton encouragement et ton aide
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumCombiner 2 requêtes SQl
- Forum[RESOLU]Probleme avec des requetes sql
- Forumaccess : requetes et formulaires
- Solutions[VBA] Erreur requete SQL et cellules
- Forumcacher tables et requetes sous access
- Solutions[VBA] Probleme requete SQL
- Solutions[VBA] probleme requete SQL
- Solutions[VBA] requete SQL
- ForumVb2005+Access:Trier par intervalles de dates ?
- Voir plus