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

Access Discussion :

Moyenne des 3 précédentes occurrences [AC-2016]


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Moyenne des 3 précédentes occurrences
    Première fois que je pose une question sur un forum donc s'il manque des infos ou autres n'hésitez pas à me demander.

    J'ai une table contenant id , date et quantité.
    Il me faudrait une requête retournant pour un id/date la moyenne des 3 précédentes occurrences (date de la clef non prise en compte).

    pour la table :

    id date qte
    toto 30/04 12
    toto 28/04 10
    toto 12/04 10
    toto 11/04 1
    toto 10/04 1
    toto 09/04 1
    toto 08/04 1
    titi 30/04 22
    titi 28/04 20
    titi 12/04 20
    titi 11/04 11
    titi 10/04 11
    titi 09/04 14
    titi 08/04 11


    résultat attendu :

    id date moy_3_prec
    toto 30/04 7
    toto 28/04 4
    toto 12/04 1
    toto 11/04 1
    ...
    titi 30/04 17
    titi 28/04 14
    titi 12/04 12
    titi 11/04 12
    ...

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Hum, ça va être pas mal compliqué en Access car Access n'as pas la notion de "3 lignes précédentes".
    La seule méthode pour y arriver c'est de numéroter les lignes et si on le fait dynamiquement, ça peut être pas mal lent.
    Est-ce que tu pourrais utiliser un critère autre comme : moyenne de Date à Date -3j ?
    Sinon il serait sans doute plus facile d'obtenir ces résultats dans Excel qui lui a la notion de "ligne précédente".

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Une autre possibilité serait de faire calcul de la moyenne en VBA et stocker le résultat dans un champ.
    Attention cette solution est GÉNÉRALEMENT une mauvaises idée mais dans le cas présent et en prenant garde à ne JAMAIS modifier le passé cela peut être jouable.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Dernier point pourrais-tu préciser quelle version de Access tu utilises ?
    Il y a parfois des solutions qui ne sont accessibles ou possibles que dans certaines versions.
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Date non contiguës
    Oui, j'avais commencé sur une piste de ce genre mais les dates ne sont pas contiguës est c'est les 30 dernières occurrences et non -30j.
    En Excel j'ai réussit a le faire effectivement (sur un id pour faire mes tests et comparer avec ma requête Access)
    Mais j'aimerais éviter de devoir utiliser une autre application en exportant puis réimportant un gros volume de données.


    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Hum, ça va être pas mal compliqué en Access car Access n'as pas la notion de "3 lignes précédentes".
    La seule méthode pour y arriver c'est de numéroter les lignes et si on le fait dynamiquement, ça peut être pas mal lent.
    Est-ce que tu pourrais utiliser un critère autre comme : moyenne de Date à Date -3j ?
    Sinon il serait sans doute plus facile d'obtenir ces résultats dans Excel qui lui a la notion de "ligne précédente".

    A+

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Mélange sql vba
    Merci aussi pour cette idée mais j'essaie au maximum de séparer le vba du sql.
    Si je n'arrive pas a trouver la/les requête(s) idéale(s), je ferai surement cela.
    Et même là je craint que mêler vba et un volume relativement important de données risque d'alourdir considérablement le traitement par des boucles ( peut-être même plusieurs imbriquées)


    Citation Envoyé par marot_r Voir le message
    Une autre possibilité serait de faire calcul de la moyenne en VBA et stocker le résultat dans un champ.
    Attention cette solution est GÉNÉRALEMENT une mauvaises idée mais dans le cas présent et en prenant garde à ne JAMAIS modifier le passé cela peut être jouable.

    A+

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Versions Access
    Je suis sous MS Access 2016 et mes clients aussi pour la plupart mais certains peuvent être encore avec la version précédente.

    Citation Envoyé par marot_r Voir le message
    Dernier point pourrais-tu préciser quelle version de Access tu utilises ?
    Il y a parfois des solutions qui ne sont accessibles ou possibles que dans certaines versions.
    A+

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Avec select top ?
    J'avais pensé à combiner d'une manière ou d'une autre avec une sous requête de type "SELECT TOP 3" avec un ORDER BY sur date et < date en cours.
    Mais j'arrive pas à le concrétiser.

    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Hum, ça va être pas mal compliqué en Access car Access n'as pas la notion de "3 lignes précédentes".
    La seule méthode pour y arriver c'est de numéroter les lignes et si on le fait dynamiquement, ça peut être pas mal lent.
    Est-ce que tu pourrais utiliser un critère autre comme : moyenne de Date à Date -3j ?
    Sinon il serait sans doute plus facile d'obtenir ces résultats dans Excel qui lui a la notion de "ligne précédente".

    A+

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Trouvé
    Apres bien des galères et des nœuds au cerveau j'ai trouvé une solution en deux étapes.

    Premières requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t1.id, t1.Date AS date1, t2.Date AS date2, t2.qte
    FROM matable AS t1 LEFT JOIN matable AS t2 ON (t1.date>t2.date) AND (t1.id= t2.id)
    ORDER BY t1.id, t1.Date DESC , t2.Date DESC

    ...qui me ressort toute les id/date précédents pour un id/date donné et la quantité de cette date précédente.

    puis une 2eme requête qui se base sur la première (req_prec ):

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT req_prec.id, req_prec.date1, req_prec.date2, avg(req_prec_1.qte) as moy, Count(req_prec.qte) AS nbqte
    FROM req_prec LEFT JOIN req_prec AS req_prec_1 ON (req_prec.date1 = req_precc_1.date1) AND (req_prec.id= req_precc_1.id)
    WHERE req_precc.date2<=[req_prec_1].[date2]
    GROUP BY req_prec.id, req_prec.date1, req_prec.date2
    HAVING Count(req_prec.qte)=3
    ORDER BY req_prec.id, req_prec.date1 DESC , req_prec.date2 DESC
    la deuxieme est plus complexe a expliquer mais grosso modo elle va
    pour chaque id/date va faire la moyenne entre toute les qte comprise entre les deux dates et ne garder que celles qui font la moyenne de trois lignes.

    Checké sous Excel, j'ai mes bons chiffres

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

Discussions similaires

  1. Petit Calcul à l'aide des enregistrements précédents
    Par laurentcr dans le forum Access
    Réponses: 5
    Dernier message: 11/09/2006, 13h41
  2. Réponses: 35
    Dernier message: 10/05/2006, 01h11
  3. Moyenne des champs non vide dans un état
    Par loutsky dans le forum Access
    Réponses: 4
    Dernier message: 05/04/2006, 17h26
  4. Tri par la moyenne des valeurs de champs ?
    Par rozwel dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/01/2005, 18h35
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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