Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2697 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [ACCESS] requete SQL max date

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ACCESS] requete SQL max date

n°1573338
jpcheck
Pioupiou
Posté le 11-06-2007 à 16:45:50  profilanswer
 

Bonjour tout le monde,
 
je cale sur une requete sql à passer dans access, et comme ca dure un peu trop, je fais appel à vous.
 
La situation:
3 tables avec
KM_D           (documents)                      
iRefDoc (clé primaire)
iRefDST (numérique)
dDate (date)
sDocTitre (texte)
 
KM_DST (sous type de document)
iRefDST (clé primaire)
sDocST (texte)
iRefDT (numérique)
 
KM_DT (type de document)
iRefDT (clé primaire)
sDocT (texte)
 
les liaisons sont KM_D.iRefDST = KM_DST.iRefDST et KM_DST.iRefDT=KM_DT.iRefDT
 
le résultat de la requête doit être
sDocT, sDocST, sDocTitre, dDate avec la dDate maximum dans la table KM_D...
 
dsl pas de screenshot pour les tables...

mood
Publicité
Posté le 11-06-2007 à 16:45:50  profilanswer
 

n°1573381
MagicBuzz
Posté le 11-06-2007 à 17:42:35  profilanswer
 

indice : faut passer par une sous-requête où km_d.date = (select max(km_d.date)

n°1573393
jpcheck
Pioupiou
Posté le 11-06-2007 à 18:00:15  profilanswer
 

oui, ca j'avais percuté ^^°
mais mon probleme c'est que pour un exemple
iRefDST   Date
1                 15/02/07
1                 23/05/07
2                 23/05/07
3                 16/04/07
 
mon résultat actuel avec max(date) est
1   23/05/07
2   23/05/07            
et
le 3  16/04/07 n'apparait pas :(

n°1573406
ingenieurc​esi
Posté le 11-06-2007 à 18:27:12  profilanswer
 

le max prend la date la plus grande en l'occurence le 23/05/2007 et donc pas le 16/04/07
non ?
 
ce que tu veux faire c pas en fait un tri croissant ?

n°1573410
seniorpapo​u
Posté le 11-06-2007 à 18:41:03  profilanswer
 

Bonsoir,
SELECT km_d.irefdst, Max([ddate]) AS Expr1
FROM km_d
GROUP BY km_d.irefdst
;
 
???
Cordialement


Message édité par seniorpapou le 11-06-2007 à 18:41:36
n°1573524
jpcheck
Pioupiou
Posté le 12-06-2007 à 00:32:41  profilanswer
 

re bonsoir,
le group by me permet d'imposer quoi exactement stp senior ?

n°1573534
seniorpapo​u
Posté le 12-06-2007 à 07:19:58  profilanswer
 

Bonjour,
c'est à mettre dans ta sous requète
 
tu auras pour chaque irefdst la date max qui lui est propre.
si tu ne le mets pas tu as les irefdst qui ont la date max de km_d.
 
lances la requete et regardes ce qu'elle donne.
MagicBuzz ou ingénieurcesi ou un autre te diront comment l'intégrer dans une requète complète. OU bien ils te diront pourquoi je me plante (encore)
Cordialement

n°1573614
tegu
Posté le 12-06-2007 à 10:31:34  profilanswer
 

Je crois qu'il y a malentendu.

jpcheck a écrit :

...avec la dDate maximum dans la table KM_D...


jpcheck a écrit :


iRefDST   Date
1                 15/02/07
1                 23/05/07
2                 23/05/07
3                 16/04/07

 

mon résultat actuel avec max(date) est
1   23/05/07
2   23/05/07          
et
le 3  16/04/07 n'apparait pas :(


Ton résultat me semble conforme à ce que tu demandes.
J'en déduis que ta demande est peut-être mal formulée.
Tu ne souhaites pas la date la plus récente de la table KM_D (23/05/07), mais la plus récente de l'enregistrement (iRefDST) en cours de jointure avec KM_D, respectivement 23/05/07 pour iRefDST=1, 23/05/07 pour iRefDST=2, 16/04/07 pour iRefDST=3, non ?

 

Si j'ai bien compris, alors ta requete devra ressembler à ça :
SELECT KM_DT.sDocT, KM_DST.sDocST, KM_D.sDocTitre, KM_D.dDate
FROM KM_D, KM_DST, KM_DT
WHERE KM_D.iRefDST = KM_DST.iRefDST and KM_DST.iRefDT=KM_DT.iRefDT and KM_D.dDate = (SELECT Max(dDate) FROM KM_D WHERE KM_D.iRefDST = KM_DST.iRefDST)

 

ou ça (syntaxe Access) :
SELECT KM_DT.sDocT, KM_DST.sDocST, KM_D.sDocTitre, KM_D.dDate
FROM KM_D INNER JOIN (KM_DST INNER JOIN KM_DT ON KM_DST.iRefDT = KM_DT.iRefDT) ON KM_D.iRefDST = KM_DST.iRefDST
WHERE KM_D.dDate = (SELECT Max(dDate) FROM KM_D WHERE KM_D.iRefDST = KM_DST.iRefDST)

 

Je ne suis pas sûr à 100% (je manque de pratique) mais j'espère que ça t'éclairera.


Message édité par tegu le 12-06-2007 à 11:18:34
n°1573702
jpcheck
Pioupiou
Posté le 12-06-2007 à 12:41:18  profilanswer
 

merci, je vais tester ca  :jap:

n°1573798
jpcheck
Pioupiou
Posté le 12-06-2007 à 15:02:46  profilanswer
 

je vous aime  :pt1cable:  
 
bon alors dans mon cas, c'est un peu plus compliqué que la demande de départ, mais ca marche :)
 

Code :
  1. SELECT KM_Documents_Type.sDocType as Type_de_Document, KM_Documents_Sous_Type.sDocSousType as sous_type_de_document, KM_Documents.sDocumentTitre as Titre_du_document, KM_Documents.dDate_Document AS date_du_document, KM_Documents.iRefDocument FROM KM_Documents_Type INNER JOIN (KM_Documents_Sous_Type INNER JOIN KM_Documents ON KM_Documents_Sous_Type.iRefDocSousType = KM_Documents.iRefDocSousType) ON KM_Documents_Type.iRefDocType = KM_Documents_Sous_Type.iRefDocType WHERE (irefannexe IS NULL) AND KM_Documents_TYpe.iRefDocType = 16 and (((KM_Documents.dDate_Document) In (SELECT MAX(ddate_document)  FROM KM_Documents WHERE KM_Documents.iRefDocSousType=KM_Documents_sous_type.iRefDocSousType ))) AND KM_Documents_Sous_Type.iRefDocSousType IN (SELECT iRefDocSousType from KM_Acces_Documents_Sous_Type where iGroupeID=4 AND (iTypeAcces = 1 OR iTypeAcces = 2) ) ORDER BY sDocType, sDocSousType;


 
je sais, il y a boire et a manger :p

mood
Publicité
Posté le 12-06-2007 à 15:02:46  profilanswer
 

n°1573800
jpcheck
Pioupiou
Posté le 12-06-2007 à 15:03:22  profilanswer
 

je vous aime  :pt1cable:  
 
bon alors dans mon cas, c'est un peu plus compliqué que la demande de départ, mais ca marche :)
 

Code :
  1. SELECT KM_Documents_Type.sDocType as Type_de_Document, KM_Documents_Sous_Type.sDocSousType as sous_type_de_document, KM_Documents.sDocumentTitre as Titre_du_document, KM_Documents.dDate_Document AS date_du_document, KM_Documents.iRefDocument FROM KM_Documents_Type INNER JOIN (KM_Documents_Sous_Type INNER JOIN KM_Documents ON KM_Documents_Sous_Type.iRefDocSousType = KM_Documents.iRefDocSousType) ON KM_Documents_Type.iRefDocType = KM_Documents_Sous_Type.iRefDocType WHERE (irefannexe IS NULL) AND KM_Documents_TYpe.iRefDocType = 16 and (((KM_Documents.dDate_Document) In (SELECT MAX(ddate_document)  FROM KM_Documents WHERE KM_Documents.iRefDocSousType=KM_Documents_sous_type.iRefDocSousType ))) AND KM_Documents_Sous_Type.iRefDocSousType IN (SELECT iRefDocSousType from KM_Acces_Documents_Sous_Type where iGroupeID=4 AND (iTypeAcces = 1 OR iTypeAcces = 2) ) ORDER BY sDocType, sDocSousType;


 
je sais, il y a boire et a manger :p

n°1573836
MagicBuzz
Posté le 12-06-2007 à 15:39:21  profilanswer
 

jpcheck a écrit :

je vous aime  :pt1cable:  
 
bon alors dans mon cas, c'est un peu plus compliqué que la demande de départ, mais ca marche :)
 

Code :
  1. SELECT KM_Documents_Type.sDocType as Type_de_Document, KM_Documents_Sous_Type.sDocSousType as sous_type_de_document, KM_Documents.sDocumentTitre as Titre_du_document, KM_Documents.dDate_Document AS date_du_document, KM_Documents.iRefDocument FROM KM_Documents_Type INNER JOIN (KM_Documents_Sous_Type INNER JOIN KM_Documents ON KM_Documents_Sous_Type.iRefDocSousType = KM_Documents.iRefDocSousType) ON KM_Documents_Type.iRefDocType = KM_Documents_Sous_Type.iRefDocType WHERE (irefannexe IS NULL) AND KM_Documents_TYpe.iRefDocType = 16 and (((KM_Documents.dDate_Document) In (SELECT MAX(ddate_document)  FROM KM_Documents WHERE KM_Documents.iRefDocSousType=KM_Documents_sous_type.iRefDocSousType ))) AND KM_Documents_Sous_Type.iRefDocSousType IN (SELECT iRefDocSousType from KM_Acces_Documents_Sous_Type where iGroupeID=4 AND (iTypeAcces = 1 OR iTypeAcces = 2) ) ORDER BY sDocType, sDocSousType;


 
je sais, il y a boire et a manger :p


pis je crois que t'as résolu le dilème de "à quel moment je fais ma césure pour indenter mon code ?"
 
avec le scroll horizontal de 12km c'est vachement plus pratique à lire :D

n°1574025
seniorpapo​u
Posté le 12-06-2007 à 18:53:45  profilanswer
 

Bonsoir,
 
Je sors, je vais acheter un écran 16/9ème 24"
 
Cordialement

n°1574026
MagicBuzz
Posté le 12-06-2007 à 18:55:42  profilanswer
 

seniorpapou a écrit :

Bonsoir,
 
Je sors, je vais acheter un écran 16/9ème 24"
 
Cordialement


Même avec avec mon 24" en 16/10 ça s'arrête à "INNER JOIN (RM_Document..." :D


Message édité par MagicBuzz le 12-06-2007 à 18:55:51
n°1574027
MagicBuzz
Posté le 12-06-2007 à 18:57:07  profilanswer
 

Sorti de ça, à vue de nez, ta sous-requête est bonne.
 
Juste que le "IN" replacé par un "=" est suffisant logiquement.

n°1574032
jpcheck
Pioupiou
Posté le 12-06-2007 à 19:10:05  profilanswer
 

merci les amis  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [ACCESS] requete SQL max date

 

Sujets relatifs
Problème d'affichage avec la date (Anglais/Francais)heure & date, c++ builder
requete imbriquée[C#] Problème requête MySql
[mysql] Requete possible ?[RÉSOLU] requête MySQL select prochains évènements
Requête multi-instructions avec MySQL[Access] Création de base "multitable" pour la même entité (xpl inside
requête SQL avec ActionScript?[SQL] [access] problème avec requête sur un champ de type date
Plus de sujets relatifs à : [ACCESS] requete SQL max date


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR