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

Requêtes et SQL. Discussion :

Calculs utilisant les enregistrements précédents


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut Calculs utilisant les enregistrements précédents
    Bonjour à tous !

    Je possède une requête sous la forme :
    BlockName CalculationMonth FlowrateInitial
    Block1_______________0_______________70
    Block1_______________1_______________70
    Block1_______________2_______________70
    Block1_______________3_______________70
    Block2_______________0_______________80
    Block2_______________1_______________80
    Block2_______________2_______________80
    Block2_______________3_______________80


    Je cherche à créer une nouvelle colonne FlowrateEvolution dans laquelle s'afficherait :
    - si le CalculationNumber=0, le FlowrateInitial
    - si le CalculationNumber=1, le Flowrate précédent (correspondant au CalculationMonth 0) *0.90
    - si le CalculationNumber=2, le Flowrate précédent (correspondant au CalculationMonth 1) *0.90
    - etc

    Pour la première partie je fais

    IIf([CalculationMonth]=0,[DataActual]![FlowrateInitial], ????)

    mais je ne sais pas par quoi remplacer les ????

    Je me doute qu'il doit y avoir des Dmin dans l'affaire, mais je n'arrive pas à formaliser...


    Je suis preneuse de toute piste qui pourrait me débloquer

    Merci beaucoup,

    Camilla


    EDIT : en relisant mon message je me dis que ce problème peut-être résolu simplement dans ce cas là en utilisant FlowrateEvolution=FlowrateInitial*(0.90)^CalculationMonth
    mais j'ai besoin de faire le même type de calcul, mais avec des ln, des exp, etc... et pas une simple suite géométrique... j'ai donc besoin de récuperer ma valeur FlowrateEvolution de l'enregistrement précédent quoi qu'il arrive

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Bonjour, et bienvenue de ce côté,

    Je te renvoie à un billet rédigé à l'époque et qui semble correspondre à ton problème : [Access SQL] Trouver l’enregistrement précédent

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup !
    Je n'ai pas réussi avec la méthode proposée dans ton lien, mais celui-ci m'a permis de faire ce que je voulais : https://www.developpez.net/forums/d1...mulee-requete/

    En revanche, ça ralentit beaucoup Access et la requête met un certain temps à calculer, ce qui m'inquiète un peu, étant donné que je vais avoir un grand nombre d'enregistrements (au moins 7000). Une idée pour améliorer ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [L/S].BlockName, [L/S].CalculationDate, [L/S].CalculationMonth, [L/S].[L/S], IIf([CalculationMonth]=0,0,DSum("[L/Scumul].[L/S]","[L/Scumul]","[CalculationMonth]<=" & [CalculationMonth] & "AND ([BlockName]='" & [BlockName] & "')")) AS Cumul
    FROM [L/S]
    ORDER BY [L/S].BlockName, [L/S].CalculationMonth;

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    merci de nous donner la valeur de FlowrateEvolution attendue pour le block1 par exemple et pour chaque CalculationMonth car c'est pas clair...

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Bonjour Galoir,

    Pour le FlowrateEvolution, c'est bon, j'ai réussi à le calculer avec une suite géométrique, de là j'ai calculé un autre champ qui s'appelle L/S, et mon but a ensuite été de calculer L/Scumul comme suit :

    BlockName_____CalculationMonth_________ L/S ________L/Scumul
    Block1_______________0_______________0,1___________0,1
    Block1_______________1_______________0,2___________0,1+0,2
    Block1_______________2_______________0,25__________0,1+0,2+0,25
    Block1_______________3_______________0,4___________0,1+0,2+0,25+0,4

    Block2_______________0_______________0,3___________0,3
    Block2_______________1_______________0,2___________0,3+0,2
    Block2_______________2_______________0,15__________0,3+0,2+0,15
    Block2_______________3_______________0,15__________0,3+0,2+0,15+0,15


    j'ai utilisé le code que j'ai mis dans mon post précédent. Mais maintenant j'ai de gros problèmes de lenteur. Le champ L/Scumul met du temps à calculer, et quand je fais des calculs à partir de L/Scumul, c'est l'horreur, Access est à un cheveux de planter.
    Je me demande donc s'il n'y a pas mieux à faire que ce que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT [L/S].BlockName, [L/S].CalculationDate, [L/S].CalculationMonth, [L/S].[L/S], IIf([CalculationMonth]=0,0,DSum("[L/Scumul].[L/S]","[L/Scumul]","[CalculationMonth]<=" & [CalculationMonth] & "AND ([BlockName]='" & [BlockName] & "')")) AS Cumul
    FROM [L/S]
    ORDER BY [L/S].BlockName, [L/S].CalculationMonth;

  6. #6
    Invité
    Invité(e)
    Par défaut
    on peut normalement calculer la somme d'une suite géométrique au fil de l'eau mais tant qu'on n'a pas les formules complètes...
    Le problème à résoudre évolue à chacun de tes postes ca va être compliqué de t'aider

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Je ne sais pas si ça sera plus performant, mais avec les assistants :

    Nom : kmilla01.PNG
Affichages : 305
Taille : 9,3 Ko

    Nom : kmilla02.PNG
Affichages : 300
Taille : 12,1 Ko

    Avec le résultat du cumul :

    Nom : kmilla03.PNG
Affichages : 304
Taille : 10,1 Ko

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup f-leb !
    Ca donne exactement le résultat souhaité, malheureusement ce n'est pas plus rapide...
    N'ayant pas trouvé d'autre solution, je me suis résolue à créer une table T_L/Scumul liée à la requête pour pouvoir continuer mes calculs sur L/Scumul sans trop de problème de lenteur.

    Merci en tous cas, et bonne journée

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Bonjour à tous,

    Après maintes heure de recherche j'ai enfin réussi à faire un Running Total selon le nom du block, en VBA.
    Je mets ça là au cas où ça puisse servir à quelqu'un.

    Table1:
    BlockName____LS______LScum

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Sub RT2()
    Dim rs As Recordset
    Dim rs2 As Recordset
    Dim Sum As Double
    Dim LStemp As Double
    Dim Name As String
     
     
    Set rs = CurrentDb.OpenRecordset("Table1")
    Set rs2 = CurrentDb.OpenRecordset("Table1")
    Sum = 0
    rs.MoveFirst
    rs2.MoveFirst
     
    Do While Not rs.EOF
     
     
    If rs.PercentPosition = 0 Then
        Sum = rs("LS")
        rs.Edit
        rs("LScum") = Sum
        rs.Update
        rs.MoveNext
     
    Else
     
    LStemp = rs("LS")
    Name = rs("BlockName")
    Nameprec = rs2("BlockName")
     
    If Not Name = Nameprec Then
    Sum = 0
    End If
     
     
    Sum = Sum + LStemp
    rs.Edit
    rs("LScum") = Sum
    rs.Update
    rs.MoveNext
    rs2.MoveNext
    End If
     
    Loop
     
     
    End Sub

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

Discussions similaires

  1. [WD19] calculs sur les enregistrements d'une rupture dans un état
    Par elscorpio dans le forum WinDev
    Réponses: 3
    Dernier message: 14/11/2014, 14h19
  2. Afficher un champs calculé depuis les enregistrements précédents
    Par Interruption13h dans le forum Requêtes
    Réponses: 5
    Dernier message: 14/03/2011, 18h30
  3. lire les enregistrements précédent d'une table
    Par lt.latinus dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 07/01/2009, 14h12
  4. [Sous-Form] Calculs avec les enregistrements
    Par The_Super_Steph dans le forum IHM
    Réponses: 8
    Dernier message: 21/05/2007, 13h53
  5. Réponses: 4
    Dernier message: 27/04/2006, 09h22

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