Pb de requete sous ACCESS (utilisation de max)

Pb de requete sous ACCESS (utilisation de max) - SQL/NoSQL - Programmation

Marsh Posté le 27-05-2003 à 15:39:22    

Kikoo all :)
Dans ma table facturation il y a :
N°reglement , N°facture , datePaiement les autres on s'en fou ^^
N° reglement est clef primaire
Sachant que il y a possibilite d'avoir une facture qui posede plusieurs datePaiement; J'aimerais obtenir le N°reglement qui correspond a la derniere datePaiement c a d au max de DatePaiement.
J'arrive a obtenir le N°Facture pour la datePaiement max mais pas le N°reglement, qd j'essai il me liste la meme facture plusieurs fois ex :
12             40000       12/04/2003
15             40000       10/03/2003
et moi je veux que la 1ere ligne
Merci pour votre aide
a+

Reply

Marsh Posté le 27-05-2003 à 15:39:22   

Reply

Marsh Posté le 27-05-2003 à 15:58:37    

Si tes numéros de facture sont uniques, moi je verrais bien un truc dans le genre :
 
SELECT
[N°reglement],[N°Facture],[datePaiement]
FROM
Facturation,
  (SELECT
   [N°Facture],Max([datePaiement]) AS Max
   GROUP BY [N°Facture]) B
WHERE
[N°Facture]=B.Max;

Reply

Marsh Posté le 27-05-2003 à 16:11:19    

Justement dans la table il y a plusieurs lignes contenant le meme N° de facture :'(
et en + il aime pas le select dans la clausse from  :cry:  
Qqun a une autre iD plz ?

Reply

Marsh Posté le 27-05-2003 à 22:01:06    

Bon, j'ai fait ta requête, mais t'as plus qu'à la comprendre pour l'adapter à ton problème, parceque j'ai préféré reprendre une table dans une de mes base ayant une architecture similaire plutôt que de me faire chier à refaire une table ;)
 
Ma table s'appelle "VOTE".
Les utilisateurs peuvent voter pour une oeuvre.
La requête retourne pour chaque oeuvre (entité), quel utilisateur a voté en dernier, et à quelle date.
 
J'utilise un "distinct" car ayant d'autres champs dans ma table cela me retourne des doublons. Tu n'en auras certainement pas besoin.
 

Code :
  1. select distinct v1.entite_id, v1.u_login, v1.crea_date
  2. from vote v1
  3. where v1.crea_date = (select max(v2.crea_date) from vote v2 where v2.entite_id = v1.entite_id)
  4. order by v1.entite_id

Reply

Marsh Posté le 27-05-2003 à 22:02:57    

Trancy a écrit :

Justement dans la table il y a plusieurs lignes contenant le meme N° de facture :'(
et en + il aime pas le select dans la clausse from  :cry:  
Qqun a une autre iD plz ?


La requête de gabouel fonctionne aussi, mais Access ne supporte pas les sous-requêtes de ce genre aussi simplement : il faut créer une autre requête, et s'en servir comme d'une vue.

Reply

Marsh Posté le 28-05-2003 à 16:10:04    

MERCI BEAUCOUP ca marche :bounce:
maintenant j'ai un autre ptit pb c que pour une facture desfois il y a 2 fois la meme dateDePaiement donc ca me retourne 2 ligne (et c normal) car il c pas quel ligne est la bonne (moi je sais c celle ou le MontantPaiement est le + grand)
J'ai fait une requete qui marche avec le montantPaiement mais J'allucine comme c LONGGGGGGG :'(
fo dire que c une sous requete d'une sous requete ... bon je la ballance si y a qqun qui pourrais la simplifier pour qu'elle soit + rapide ce serrais cool ;)
 
SELECT v1.NoFactureClient, v1.NoReglement, v1.DateDePaiement, v1.MontantReglement
FROM Table_ReglementFacture AS v1
WHERE (((v1.DateDePaiement)=(select max( v2.DateDePaiement) FROM Table_ReglementFacture AS v2 where  v2.NoFactureClient = v1.NoFactureClient AND v1.MontantReglement = (select max(v3.MontantReglement) FROM Table_ReglementFacture AS v3 WHERE v1.NoFactureClient = v3.NoFactureClient AND v1.DateDePaiement=v3.DateDePaiement )  )))
ORDER BY v1.NoFactureClient;
 
MERCI de votre aide, merci MagicBuzz

Reply

Marsh Posté le 28-05-2003 à 21:40:38    

Sans tester ni rien, je suis tenté de dire que cette requête marche :
 

SELECT v1.NoFactureClient, v1.NoReglement, v1.DateDePaiement, max(v1.MontantReglement)  
FROM Table_ReglementFacture AS v1  
WHERE v1.DateDePaiement=(select max(v2.DateDePaiement) FROM Table_ReglementFacture AS v2 where  v2.NoFactureClient = v1.NoFactureClient)
GROUP BY v1.NoFactureClient, v1.NoReglement, v1.DateDePaiement
ORDER BY v1.NoFactureClient;


 
Après, je sais pas si ça va être rapide (à priori, il ne devrait pas y avoir de problème)


Message édité par MagicBuzz le 28-05-2003 à 21:40:58
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed