IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Select avec "having max" sur chp date


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Select avec "having max" sur chp date
    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)

    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
    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)

    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

    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¿
    celle ci passe en revanche
    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¿
    c'est a cause du group by ?
    (j'en doute mais .... )

  2. #2
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    y'a une regle de base en sql qui dit que tous les champs du select doivent apparaitre dans le group by

    si tu fais select *
    ton group by devra lister tous les champs de ta table
    GROUP BY CHAMP1, CHAMP2, CHAMP3, etc.
    voilà

    a+
    juva
    Juvamine

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    merci
    la requete ci dessous ne genere pas d'erreur de syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select MVCTCODART,MVCJMVT  from mvtsto where Mvitsoc=¿103¿ GROUP by MVCTCODART,MVCJMVT HAVING MAX(MVCJMVT)<=¿20090701¿
    mais ramene tout les resultats sur l'article PF sans tenir compte du critere <=¿20090701¿ :

    PF¿20090101
    PF¿20090501
    PF¿20090611
    PF¿20090815

    edit :
    celle a est deja mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select MVCTCODART,MVCJMVT  from mvtsto where Mvitsoc=¿103¿ and MVCJMVT<=¿20090701¿ GROUP by MVCTCODART,MVCJMVT HAVING MAX(MVCJMVT)<=¿20090701¿
    elle me ramene

    PF¿20090101
    PF¿20090501
    PF¿20090611

    donc il faut que j'arrive a filtrer ce premier resultat et prendre le max(date_mvmt)

  4. #4
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    pourquoi ne pas faire

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT   MVCTCODART,
             MAX(MVCJMVT)
    FROM     mvtsto
    WHERE    Mvitsoc=¿103¿
    GROUP BY MVCTCODART,
    HAVING   MAX(MVCJMVT)<=¿20090701¿
    Juvamine

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    celle ci marche a priori ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MVCTCODART, MAX(MVCJMVT) FROM mvtsto WHERE Mvitsoc=¿103¿ and MVCJMVT<=¿20090701¿ GROUP BY MVCTCODART
    encore merci pour ton aide !!
    (je vais faire un tour sur la faq biblio sql)

  6. #6
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    derien.

    Pense a mettre le tag pour le topic

    A+

    juva
    Juvamine

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. la fonction Max/Min sur des dates
    Par chabagrou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/12/2007, 18h38
  2. [SQL2K]Requete sur une chaine avec une ou plusieurs quote
    Par tazamorte dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/04/2007, 08h22
  3. Select et insert avec des caracteres speciaux (quote ')
    Par Paco75 dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/10/2006, 14h59
  4. probleme avec des filtres de recherche sur des dates
    Par MCarole dans le forum Access
    Réponses: 2
    Dernier message: 24/07/2006, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo