verschil berekenen tussen opeenvolgende records in access

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Gilbert1947
  • Registratie: Oktober 2022
  • Laatst online: 01-11-2022
Mijn vraag
Ik wil het verschil berekenen tussen 2 opeenvolgende records in een database in access en deze waarde in een nieuw veld plaatsen.
voorbeeld een database met de velden "datum" en "waarde".

datum waarde
1/1/2022 100
2/1/2022 150
3/1/2022 140
enz....

hoe kan ik een nieuw veld aanmaken waarin het verschil tussen de opeenvolgende "waardes" wordt berekend? Dus 150 - 100 = 50 , 140-150 =-10 enz... deze waarde wordt dan in een nieuw veld "verschil" geplaatst.

Relevante software en hardware die ik gebruik
.Office

Wat ik al gevonden of geprobeerd heb
nog geen oplossing hiervoor gevonden.

Beste antwoord (via Gilbert1947 op 30-10-2022 16:49)


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

uit het hoofd iets als:
code:
1
SELECT t2.waarde-t1.waarde as verschil from t as t1, t as t2 where t2.datum=t1.datum+1


en naar believen maak je er een update query van.
code:
1
2
UPDATE t AS t1, t AS t2 SET t2.verschil = t2.waarde-t1.waarde
WHERE t2.datum=t1.datum+1

[ Voor 22% gewijzigd door Lustucru op 30-10-2022 12:13 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Alle reacties


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 19-09 19:59

MAX3400

XBL: OctagonQontrol

Zoiets? https://www.access-progra...record-from-record.91869/

Hou wel rekening met je formattering, je decimale plaatsing en je metric/imperial notaties.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • +1 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:33

Dido

heforshe

Vanuit een strikte kijk op datamodel-normalisatie sla je dit gegeven niet op, want het is een afgeleid gegeven. Dan moet je het dus afleiden op het moment dat je het nodig hebt, dus als je je gegevens ophaald om ze ergens te tonen. Dat betekent wel dat elke lees-actie op een enkel record resulteert in twee leesacties.

Als je (vanwege performance, bijvoorbeeld) de afgeleide gegevens in je database beschikbaar wilt hebben zou je kunnen overwegen de waarde te berekenen op het moment dat je een nieuw record toevoegt, dat kan met een after insert trigger op je tabel.
Je zult dan wel eenmalig door je database heen moeten lopen om de ontbrekende waardes in te vullen, maar daarna is het lezen van je data een stuk simpeler.

Overigens, "opeenvolgende" records in een database heeft over het algemeen geen enkele betekenis, wen jezelf aan om altijd te specificeren wat je bedoelt met "vorige" of "volgende" record. Alles hangt af van hoe je je gegevens ordent, dat kan op volgnummer, datum van aanmaak, of alfabetisch op lievelingskleur van de gebruiker die het record aanmaakt ;)

[ Voor 17% gewijzigd door Dido op 30-10-2022 10:05 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Vergeet het idee van 'opeenvolgende records' in een database, maar denk functioneel na over wat 'opeenvolgend' betekent. In jouw voorbeeld wil je de waarde vergelijken met de waarde van de dag ervoor. Dat is simpel.

Maar mischien is jouw situatie wel minder eenvoudig. Is het gegarandeerd dat er iedere dag exact een waarde wordt geregistreerd? Als dat niet zo is dan moet je het wellicht herformuleren als 'de waarde behorend bij de grootste datum/tijd registratie die kleiner is dan.

Universeel werkt het natuurlijk om te sorteren op een veld en dan de recordset te doorlopen met VBA.

En zoals @Dido terecht opmerkt: waarom wil je het opslaan en zo ja, bereken het dan op het moment dat een record wordt ingevoegd. Enhij vult zijn post weer aan met wat ik schrijf. Gaat lekker. :P

[ Voor 14% gewijzigd door Lustucru op 30-10-2022 10:09 . Reden: dido ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • Gilbert1947
  • Registratie: Oktober 2022
  • Laatst online: 01-11-2022
Lustucru,
"In jouw voorbeeld wil je de waarde vergelijken met de waarde van de dag ervoor. Dat is simpel."

Ik wil inderdaad de waarde vergelijken met de waarde van de dag ervoor.
Hoe zou dit dan kunnen gedaan worden?

Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 15:13
De tabel joinen op zichzelf met een datum offset-1 dag?

Roomba E5 te koop


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

uit het hoofd iets als:
code:
1
SELECT t2.waarde-t1.waarde as verschil from t as t1, t as t2 where t2.datum=t1.datum+1


en naar believen maak je er een update query van.
code:
1
2
UPDATE t AS t1, t AS t2 SET t2.verschil = t2.waarde-t1.waarde
WHERE t2.datum=t1.datum+1

[ Voor 22% gewijzigd door Lustucru op 30-10-2022 12:13 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • Gilbert1947
  • Registratie: Oktober 2022
  • Laatst online: 01-11-2022
Lustucru, bedankt voor het antwoord. Werkt zoals ik het graag wou hebben.
Pagina: 1