|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
Bon déjà je suis désolé de venir poser une question qui va apparaître à tout le monde super simple. C'est pas faute d'avoir cherché, d'avoir demandé (à deux amis supposés être compéténts dans le sql). Je me suis balladé sur le forum. J'ai rien vu qui aurait pu m'aider. Mon problème est super simple :
- 1 table facture - 3 champs : 1/ IDF identifiant facture (sans doublons) 2/ IDC identifiant client (avec doublons) 3/ DATF date de la facture Je veux pour chaque client l'identifiant de la dernière facture ainsi que la date correspondante. J'ai utilisé cette syntaxe mais il me renvoie un tableau qui contient toutes les factures : Code sql :
Code sql :
ps: j'ai mis en pieces jointes le fichier access qui contient la table en question. On a 20027 contacts. |
||||
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Bonjour,
En fait le problème vient du regroupement par ton identifiant de facture, comme il est différent partout, et que tu regroupe par rapport à lui alors tu auras exactement la mm table qu'au départ, il faut alors faire 2 fois une sélection de date maximale, une fois par regroupement unique sur le client et ensuite sur les 2. Je te propose donc cette solution : Code :
Cordialement, Quentin
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
J'ai fais tourné ton code, ça ne marche toujours pas en revanche ça m'a donné une idée. Merci pour le temps que tu as passé dessus. Très cool de ta part. Je vous tiens au courant
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Nicolas GuimbalConsultant/développeur ERP Inscription : mai 2008 Messages : 1 254 ![]() |
Bonjour,
Effectivement ce n'est pas une requête simple puisqu'il faut interroger 2 fois la même table Dans le même ordre d'idée c'est plus lisible avec Dmax: Code :
select * from matable where madate=dmax("madate","matable","macle=" & macle) |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
Finalement j'ai toujours pas réussi à m'en sortir même si je sens que y'a du bon dans ce que dit Nitromard.
Sinon Nico, ca a l'air super intéressant, y'a moyen que tu développes parce que j'ai pas compris ce que c'était que dmax. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Nicolas GuimbalConsultant/développeur ERP Inscription : mai 2008 Messages : 1 254 ![]() |
Dmax, Dmin, Dsum, Dcount, Dlookup... sont des fonctions qui peuvent remplacer un select pas trop complexe. Il doit être relativement facile de trouver de la doc dessus. Les 3 arguments sont :
- le champ - la table - la condition where |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
merci infiniment pour la réponse je vais regarder ça
|
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2003 Messages : 25 ![]() |
As tu essaye de creer un champ combine afin d avoir une clef unique : combiner MAX(Table.DATF) et IDC ? Ce serait un truc du genre :
Code sql :
SELECT TABLE.IDC, TABLE.DATF, TABLE.IDF FROM TABLE WHERE TABLE.DATF & TABLE.IDC IN (SELECT Last(TABLE.DATF) & TABLE.IDC FROM TABLE GROUP BY TABLE.IDC); |
|
|
00
|
|
|
#9 | ||
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Bonjour,
Pourrais-tu détailler en quoi la requête que je t'ai fournie ne fonctionne pas? J'ai testé avec des données simple du genre : IDF, IDC, DATF 1, X, 31/12/2010 2, X, 20/11/2010 3, Y, 15/03/2006 4, Y, 12/01/2007 5, Y, 21/09/2001 6, Z, 06/01/2001 7, Z, 07/05/2000 Et cela fonctionne bien. J'obtiens les numéros de factures, les numéros des clients (apparation unique de clients) et les dates maximales, cad les dernières dates de factures. Code :
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
||
|
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
j'ai essayé ça
Code SQL :
|
||
|
|
00
|
|
|
#11 | |||
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
Citation:
je ne comprends pas pourquoi ça ne marche pas, mais lorsque je fais tourner ta requête, j'ai autant de lignes qu'il y a de factures. Si tu veux il y a des doublons dans la colonne identifiant client. voici un copier coller d'un bout de la table que ta requête me sort IDC MaxDeDATF IDF 176 01/05/2010 7359 176 01/06/2011 21419 or je veux qu'une seule ligne par client. Celle qui correspond a la derniere facture. En gros ta requête me renvoie la table de départ avec les colonnes identifiant client et datefacture permutées. ps : oui la table essai ne sert à rien |
|||
|
|
00
|
|
|
#12 |
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Hé bien, je ne comprends pas, cela devrais fonctionner...
Tente juste une chose, inverse dans le dernier group by le IDF et le IDC pour voir...
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
|
|
00
|
|
|
#13 |
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Si cela ne marche encore pas, enlève le TABLE.IDF du group by...
Teste, cela ne coute rien ^^
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
|
|
|
00
|
|
|
#15 | ||
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Code :
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
||
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
Ouais j'avais déjà essayé d'inverser IDC et IDF. Ca marche toujours pas. Exact pour la table TABLE ca craint quand même lol. Je sais plus quoi faire pour cette satanée requête j'ai même rajouté un "EXISTS" devant le WHERE sans rien y comprendre
|
|
|
00
|
|
|
#17 |
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Le EXISTS se met à la place du IN. Essayez peut être avec cet exist.
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
|
|
|
00
|
|
|
#19 | ||
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
pour ceux que ca intéresse, j'ai réussi en faisant :
Code SQL :
|
||
|
|
00
|
|
|
#20 | ||||||||
|
Membre Expert
![]() Nicolas GuimbalConsultant/développeur ERP Inscription : mai 2008 Messages : 1 254 ![]() |
D'où sort iddate dans ta requête ???
Code :
La difficulté est de sélectionner la date max ET UNIQUEMENT le n° de facture associée. Avec Dmax ça s'écrit je pense : Code :
Code :
![]() Avec mes requêtes ci-dessus (et probablement aussi avec la tienne) si un client a eu plusieurs factures ce jour là ça les trouve toutes Finalement je ne trouve que cette solution qui marche bien : Code :
|
||||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com