begin process at 2012 05 27 05:38:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

Access

 > 

Requêtes

 > 

sélectionner les enregistrements pour la valeur max d'un champ d'une table liée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

sélectionner les enregistrements pour la valeur max d'un champ d'une table liée

vendredi 18 novembre 2011 à 14:12:56 | sélectionner les enregistrements pour la valeur max d'un champ d'une table liée

rlapt

Bonjour,

Je souhaite faire une requête SQL à partir d'excel, dans une base Access.

J'ai deux tables liées par des champs d'index :
Table 1 -> Nro Documents
Table 2 -> Rév Documents

Je souhaire récupérer l'ensemble des champs des deux tables avec la totalité des enregistrements de la Table 1 (jointure left join). Ceci uniquement pour la révision maximale du document (Champ "Nro de révision" de la Table 2)
Les deux tables comportent un champ d'index numéro automatique. Ceci m'interdit les forme comme Select table1.*,Table2.* ...

Auriez-vous une solution ?

Petit détail la valeur de la révision est alphanumérique. Peut-on déterminer ma méthode ce comparaison ?

Merci d'avance de prendre du temps à réfléchir à mon problème.

RLAPT
samedi 19 novembre 2011 à 11:34:27 | Re : sélectionner les enregistrements pour la valeur max d'un champ d'une table liée

cgandco

Bonjour,

Peux tu donner une description de tes deux tables avec plus de détails.
(liste des champs)

Dans ta table2 toutes les révisions d'un même document sont elles enregistrées (*), ou simplement la dernière révision?

(*) dans ce cas, as tu une description du fonctionnement de ta révision car en alpha numérique on peut inventer ce que l'on veut ! par ex : 1,2 ou 1a,1b,2a et même 1a4j,1b5y ...

Bonne journée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
mardi 22 novembre 2011 à 10:50:55 | Re : sélectionner les enregistrements pour la valeur max d'un champ d'une table liée

jopop

Salut,

pour ce qui est de la requête il te suffit de passer par un GROUP BY, ex. :
Code sql :
SELECT doc.id, doc.titre, MAX(rev.numero)
  FROM doc, rev
 WHERE doc.id = re.iddoc
 GROUP BY doc.id;


Pour ce qui est de la comparaison des révisions alphanum, deux cas :
- les "numéros" de révision suivent l'ordre alphabétique -> rien à faire,
- les "numéros" de révision sont n'importe comment (ce qui n'aurait pas de sens dans le cadre d'une fonctionnalité d'historisation, mais bon) -> tu devras peut-être ajouter une colonne à ta table "rev" qui permettra un ordonnancement plus simple, genre un entier incrémenter, ou une date.

bon PL
mardi 22 novembre 2011 à 11:32:19 | Re : sélectionner les enregistrements pour la valeur max d'un champ d'une table liée

cgandco

Bonjour,

C'est bien comme requete mais attention si les revisions sont de la forme 1a,1b,2a ...

la version 1a est plus grande que la version 10a il faut donc stocker 01a.
Bonne journée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
mardi 22 novembre 2011 à 19:45:26 | Re : sélectionner les enregistrements pour la valeur max d'un champ d'une table liée

rlapt

Bonsoir,

Merci du temps passé pour trouver une solution aux difficultés que je rencontre.

Pour la proposition de Jopop, je n'arrive pas à faire fonctionner le code dans la mesure où comme j'écrivais dans mon premier texte le fait de vouloir récupérer tous les champs interdit l'emploi du group by

Pour ce qui concerne les révisions ; dans l'industrie il est commun d'utiliser des révisions que j'appellerai interne en numérique jusqu'à la commande de où l'on utilise le document, puis en numérique après la commande.

J'ai donc pour un même document une succession de révision du style A0, A1, A2 puis 01, 02, 03 ce qui ne facilite pas le classement.

Merci encore.

RLAPT
mardi 22 novembre 2011 à 22:16:57 | Re : sélectionner les enregistrements pour la valeur max d'un champ d'une table liée

cgandco

Bonjour,

Comme l'a dit Jojop tu dois ajouter un champ DateRevision (smalldatetime ou entier incrémenté automatiquement) avec comme valeur par défaut getdate().

et ensuite pour récupérer toutes les lignes passer par une table temporaire dans un procedure stockée

Sa requete devient alors (a mettre dans une procedure stockée :

Code sql :
SELECT rev.iddoc, Dater=MAX(rev.DateRevision)
into #tmp
FROM rev
GROUP BY rev.iddoc;

select doc.*,rev.* 
from doc,rev,#tmp t
where doc.iddoc = t.iddoc
and rev.iddoc = t.iddoc
and rev.DateRevision = t.Dater

drop table #tmp


Attention dans le champ DateRevision les heures,minutes et secondes doivent être stockées ou alors tu risques d'avoir deux versions avec la même date.

Si tu choisis de mettre un champ entier incrementé, les enregistrements devront vraiment être entrés dans le bon ordre. Plus moyen de les modifier.

Bonne soirée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
mercredi 23 novembre 2011 à 01:07:10 | Re : sélectionner les enregistrements pour la valeur max d'un champ d'une table liée

cgandco

OOOPPPSSSS j'ai glissé
mille excuses c'est jopop



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.


Cette discussion est classée dans : table, valeur, champ, enregistrements, tables


Répondre à ce message

Sujets en rapport avec ce message

Comparaison [ par romainbisson ] Salut,Je souhaite comparer deux tables A et B ou le champ C existe dans les deux tables, mais je veux que C soit aboslument egal dans  les deux tables Boucler sur deux tables [ par XtazyMushroom ] Bonjour j'ai un petit probleme pour executer une boucle sur deux tables. Je m'explique J'ai une table 1 et une table 2: Table 1 id(char) valeur 334 Mettre à jour un champ avec un champ d'une autre table [ par fauve ] Bonjour, Je rencontre un soucis, je souhaite mettre à jour un champ avec celui d'une autre table. En temps normal, je n'ai aucun problème tant que l Modifier la valeur d'un champ d'une table importé d'une autre table [ par jacfev ] Bonjour, Je dois modifier la valeur d'un champ d'une table importé d'une autre table. La table prix contient le champ prix. Ce champ doit être modif Ecrire des champs dans plusieurs tables en un fois avec index [ par jacfev ] Bojour, Je dois copier des champs d'une table dans 3 autres tables. J'ai une table source nommée devis avec les champs codearticle, designation, prix, Requete union avec nom de table en variable. [ par cesar94 ] Bonjour, J'utilise Access 2000 et je souhaiterais creer une requete union dans laquelle les tables a utiliser dependent des parametres entres par l'u afficher une base [ par lilyy59 ] Bonjour, J'ai fait un code en cour qui marchait très bien, mais je ne sais pas pourquoi chez moi il ne marche pas. [code=php]$bi = new boxint($connex Requète SELECT avec INNER JOIN sur plusieurs tables et des cles manquantes [ par bobarman ] Bonjour, j'ai 5 tables: Une table Fabrications tout en haut, 3 tables filles reliées à cette table Fabrications : Commandes, Formules, ControlesQualit comparer 2 tables ,recuperer une info [ par bubbledesavon ] bonjour , je suis desolé de ma demande ,cela doit etre une demande recurente mais je n'est pas trouve sur le forum une reponse a ma question . je vous Retrouver l'ID d'une clé étrangère sur l'ensemble d'une base Oracle [ par amundain ] Bonjour à tous, Je me pose une question à laquelle je ne suis pas encore parvenu à trouver de réponse, je me tourne donc vers la communauté... J'uti


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales