Ecart enregistrement précédent

Résolu
Ollam Messages postés 82 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je voudrais dans une requête pouvoir récupérer l'écart avec l'enregistrement précédent:
Exemple:

Longueur: 150
Longueur: 100
Longueur: 80

Je voudrais pouvoir afficher dans un second champ l'écart:
Longueur: 150 | Ecart: (vide ou zéro)
Longueur: 100 | Ecart: -50
Longueur: 80 | Ecart: -20

Je suis sous Access 2007/2016

En vous remerciant par avance

Configuration: Windows / Chrome 96.0.4664.45

8 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    comment détermines-tu le précédent? as-tu un champ qui peut servir à les trier?
    0
  2. Ollam Messages postés 82 Statut Membre
     
    Bonsoir,

    EN fait la table à trois champs:
    ID_longueur (numéro Auto)
    date_suivi
    longueur

    Concernant le tri, chaque nouvelle ligne sera affiché dans l'ordre ou elle se présente.
    Le but étant de montrer une évolution, une tendance
    Donc la dernière ligne enregistrée, sera aussi la dernière affichée

    Donc pour répondre à ta question, il est possible de déterminer le champ précédent sur l'ID qui affiche un numéro qui s'incrément automatiquement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Quelles sont tes connaissances en SQL?
      Dans quel contexte fais-tu ce travail?
      0
  3. Ollam Messages postés 82 Statut Membre
     
    La réponse est plutôt simple concernant mes connaissance en SQL, entre -1 et 0 !!!!
    J'ai développé plusieurs bds sur Access, mais toujours très simple comme une encyclopédie sur les gemmes, ou encore sur la bourse.
    Mes développements ne sont que pour moi, c'est juste un travail perso qui le sert aussi à apprendre.
    Voilà pour le conteste
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Partant d'une table nommée lgtb avec deux champs, ID, et lg, je suggère ceci:
      créer une requête nommée lgqprevid:
      SELECT t1.ID, t1.lg, max(t2.ID) AS previd
      FROM lgtb AS t1 LEFT JOIN lgtb AS t2 ON t2.ID < t1.ID
      GROUP BY t1.ID, t1.lg;

      ensuite, la requête suivante donne, je pense, le résultat attendu:
      SELECT q.lg as lg, q.lg - t.lg as ecart
      FROM  lgqprevid as q left JOIN  lgtb as t ON t.ID = q.previd;
      


      Il est possible de faire cela en une seule requête, mais c'est beaucoup moins clair:
      SELECT q.lg AS lg, q.lg - t.lg AS ecart
      FROM (SELECT t1.ID, t1.lg, max(t2.ID) AS previd
      FROM lgtb AS t1 LEFT JOIN lgtb AS t2 ON t2.ID < t1.ID
      GROUP BY t1.ID, t1.lg)  AS q LEFT JOIN lgtb AS t ON t.ID = q.previd;
      0
  4. Ollam Messages postés 82 Statut Membre
     
    Bonjour,
    Merci beaucoup pour la réponse et désolé pour ma réponse tardive.

    Bref, je viens d'essayer d'appliquer la seconde solution (tout en 1) car je n'ai pas compris comment gérer la première solution.
    J'ai créé une requête avec la table lgtb, puis j'ai sélectionné "SQL direct" et ai fait un copier/coller de la seconde solution. J'ai enregistré sous "lgqprevid"

    Quand je lance la requête, cela ouvre une fenêtre "Sélectionner la source de données"

    Alors, j'ai l'impression que je n'ai pas fait ce qu'il faut, ou il faut !!!!

    Merci d'avance
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      il faut créer une requête, l'afficher en mode SQL, puis coller le texte.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ollam Messages postés 82 Statut Membre
     
    Merci beaucoup,
    En effet, je ne passais pas par le bon endroit !!!!!
    Par contre l'ai ajouté un champ "Date" dans la table et dans la requête (bien sur).
    J'ai testé avec uniquement 3 lignes.
    Cependant, la requête n'affiche pas les bonnes dates.
    Pas date sur la première ligne (ID 1)
    La ligne 2 (ID 2) affiche la date de la première ligne
    et la ligne 3 (ID 3) affiche la date de la ligne 2



    Bref, il applique à tous les champs le décalage finalement demandé par le script.
    J'ai alors créé une seconde requête reprenant ID, lg et date de la table et "ecart" de lgqprevid.
    Là je me retrouve avec les 3 lignes, mais x3 (voir ci-dessous



    Merci bien
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      les écarts sont-ils corrects?
      0
      1. Ollam Messages postés 82 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonsoir,
        Oui, les écarts sont OK:
        126.20 - 123.90 = -2.30
        123.90 - 120.00 = -3.90
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Ollam Messages postés 82 Statut Membre
         
        donc cela fonctionne comme tu as demandé au départ.

        si tu as modifié la requête suggérée, il est utile de nous montrer le code source de la requête modifiée.

        tu as écrit que tu faisais cela pour apprendre. qu'essaies-tu d'apprendre?
        tu n'apprendras certainement pas à utiliser Access en recopiant des suggestions.
        0
      3. Ollam Messages postés 82 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Oui, j'apprends beaucoup.
        Avant de chercher de l'aide j'essaie par moi-même en cherchant les codes à utiliser de-ci de-là.
        Chaque "développement" que je fais est différent, mais il y a toujours des choses que je récupère d'applications précédentes et que j'essaie d'adapter et c'est pas toujours facile.

        Encore merci pour ton aide !!!!
        0
      4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Ollam Messages postés 82 Statut Membre
         
        peux-tu marquer la discussion comme résolue?
        0
  7. blux Messages postés 5044 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    il faut faire attention car Access ne renvoie pas d'ordre dans une requête si rien n'est spécifié.

    Deux requêtes identiques sur une même table peuvent amener des résultats avec un ordre totalement différent quand bien même on n'aurait ajouté qu'une seule ligne.

    Donc là, il faut absolument un ordre quelconque, ce serait sûrement l'horodatage...
    0
  8. Ollam Messages postés 82 Statut Membre
     
    Oui, peut-être, je ne sais pas.
    Mes connaissances sont trop limitées pour apporter la moindre affirmation.
    Merci
    0
  9. Ollam Messages postés 82 Statut Membre
     
    J'ai réussi pour que les dates soient correctement attachées aux ID des lg.
    Après avoir recopier le script dans la requête en mode SQL.
    Je suis retourné dans la présentation classique des requêtes et j'ai ajouté la table lg puis le champ ID pour contrôle et c'est OK.

    Merci beaucoup pour votre aide :))
    0