Bonjour a tous.
J'ai une table mouvement de stock (cf ci dessous , il y a plus de champs dans la realité )
>Mvitsoc Mvctcodart Mvctcomart composent la clé unique :code société , code article et code complementaire de l'article
le champ MVCJMVT est le jour de mouvement le champ date sur lequel je dois faire s'appuyer mes requetes
Mvitsoc Mvctcodart Mvctcomart Mvcjmvt Mvcjsai Mvcnqte Mvcnpunit Mvctexppu Mvcnavpmp
100 PF 01/01/2009 12/08/2009 850.000 2.000 M 0.00
100 PF 01/05/2009 12/08/2009 2.000 8.000 M 0.000
100 PF 15/08/2009 12/08/2009 9999.000 1.50 M 0.000
100 PF 11/06/2009 12/08/2009 2.000 7.00 M 0.000
Objectif : je veux pour chaque article recuperer l'enregistrement (tout les champs de cet enregistrement si possible ou alors 6 prioritaires ) le plus récent (ça c'est facile) MAIS et c'est important sur les mouvements anterieur ou egale au 01/07/2009
i.e je dois d'abord filtrer la table pour avoir uniquement les mouvements de stock antérieurs ou egaux à ce 1er juillet 2009 puis pour chaque article selectionner l'enregistrement le plus recent.
La par ex. pour l'article PF la requete devrait me sortir le mouvement en date du 11/06/2009
j'ai tenté pls truc en faisant une recherche au prelable sur le net (developpez , hardware ) (je ne maitrise que les select simple avec quelques jointures, je voulais utiliser le having qui permet de "filtrer les resultats" d'une requete mais sans succes)
Dans ces essais je n'ai pas fait de restriction/tri sur le code société et le le code complementaire car normalement le plus gros des enregistrement se feront sur la société 100 (en sachant que je voudrais idealement uniquement les enregistrements de la société 100 mais pas obligatoire > s'il y a des resultats sur d'autres sociétés je le supprimerais dans xls apres export)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 >>select * from mvtsto where MVCJMVT in (select max(MVCJMVT) from mvtsto) and MVCJMVT<=20090701 >>select * from mvtsto where MVCJMVT<=¿20090701¿ GROUP by MVCTCODART HAVING MVCJMVT=(SELECT max(MVCJMVT) from mvtsto) order by mvcjmvt >>select mvctcodart,max(MVCJMVT) as MVCJMVT from mvtsto group by mvctcodart
Tout se passe sur une seule table donc on s'imagine au depart que ca va etre simple mais en fait pas tant que ça
A partir de ce topic
http://www.developpez.net/forums/d69...rs-mouvements/
j'ai tenté la requete ci dessous mais ça ne marche pas
celle ci passe en revanche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Select * from mvtsto where Mvitsoc=¿103¿ GROUP by MVCTCODART HAVING MAX(MVCJMVT)<=¿20090830¿
c'est a cause du group by ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Select MVCTCODART from mvtsto where Mvitsoc=¿103¿ GROUP by MVCTCODART HAVING MAX(MVCJMVT)<=¿20091228¿
(j'en doute mais .... )
Partager