eerste waarde in een reeks niet meerekenen

Status
Niet open voor verdere reacties.

idefixnoa

Nieuwe gebruiker
Lid geworden
14 aug 2006
Berichten
3
Hallo,

Ik heb in een database een rapport gemaakt wat het totaal aantal getankte liters en het totaal aantal verreden kilometers van een auto moet weergeven waarna het gemiddeld verbuik uitgerekend moet worden.
In de database zit een tabel waarbij de kilometerstand bij elke tankbeurt en de getankte liters over een bepaalde periode wordt weergegeven:
week datum KM-tank getankte liters Kenteken
42 12-10-2009 271434 110 XX-XX-01
42 13-10-2009 271818 135 XX-XX-01
42 16-10-2009 272398 209 XX-XX-01
43 19-10-2009 272937 155 XX-XX-01
43 22-10-2009 273568 214 XX-XX-01
43 24-10-2009 274125 148 XX-XX-01
44 28-10-2009 274513 140 XX-XX-01
44 30-10-2009 275096 190 XX-XX-01
44 31-10-2009 275448 77 XX-XX-01
Ik reken de kilometers uit met =(Max([KM-tank])-Min([KM-tank])) dat gaat goed. Maar bij het uitrekenen van de getankte liters kom ik in de problemen.
Het is namelijk zo dat de eerste waarde van de getankte liters niet meegnomen moet worden in de optelsom (in het voorbeeld dus 110), omdat dit de getankte liters zijn die getankt zijn bij de eerste km-stand (en dus niet horen bij de verreden kilometers die na die tankbeurt zijn gereden).
Als ik de getankte liters zou optellen met =Sum([getankte liters]) komt er 1378 liter uit maar ik wil eigenlijk :
=Sum([getankte liters]) min de eerste waarde van getankte liters (in het voorbeeld :1378 - 110 = 1268 liter.

Heeft iemand een idee hoe ik dit zou kunnen doen?
 
Laatst bewerkt:
Ik heb je gegevens in een tabel gezet, en er wat data bijgegooid, en heb vervolgens een query gemaakt die zo ongeveer doet wat je wilt.
Het proces bestaat uit twee stappen:
Stap 1: maak een tijdelijke tabel met de records voor het datumbereik.
SELECT Benzine.week, Benzine.datum, Benzine.[KM-tank], Benzine.[getankte liters], Benzine.Kenteken INTO Benzine_Dag
FROM Benzine
WHERE (((Benzine.datum) Between #10/12/2009# And #10/31/2009#))
GROUP BY Benzine.week, Benzine.datum, Benzine.[KM-tank], Benzine.[getankte liters], Benzine.Kenteken;

Stap 2: maak een query die vervolgens het benzineverbruik uitrekent voor de records.
Deze query kun je dan als basis voor je rapport gebruiken.
SELECT Benzine_Dag.datum, CDbl([datum]) AS MijnDag, DSum("[getankte liters]","Benzine_Dag","datevalue([datum])<=" & [MijnDag]) AS Benzine_DagTotaal, DSum("[getankte liters]","Benzine_Dag","datevalue([datum])<=" & [MijnDag])-(DSum("[getankte liters]","Benzine_Dag","datevalue([datum])<=" & [MijnDag]-1)) AS Benzine_DagMaand
FROM Benzine_Dag
WHERE (((Benzine_Dag.datum) Between #10/12/2009# And #10/31/2009#))
GROUP BY Benzine_Dag.datum, CDbl([datum]);

Als je de tweede query uitvoert, zul je zien dat hij geen berekening maakt voor het eerste record. Precies wat je wilt. De reden om een extra tabel te gebruiken is, dat de berekening alleen voor het eerste record wordt overgeslagen. Je hebt dus een tabel nodig, waarbij je eerste datum ook het eerste record is. Dat zal denk ik geen probleem zijn, want dat proces kun je volledig automatiseren.
 

Bijlagen

  • Query Berekening.jpg
    Query Berekening.jpg
    24,9 KB · Weergaven: 37
Octafish,

Dank voor je snelle reactie! Ik kom er echter toch niet helemaal uit. Op een of andere manier gaat er iets niet goed, maar ik kom er niet achter waar de fout zit.
Ik stuur een gezipt voorbeeld van de mdb mee waarin ook het rapport zit zoals ik die origneel had aangemaakt.

Heeft iemand een oplossing?
 

Bijlagen

Ik constateer voorlopig wel dat je veld-instellingen niet jofel zijn, waardoor de queries dus inderdaad niet werken. Er is bijvoorbeeld een datumveld dat je als tekstveld hebt opgemaakt... Ook zijn de numerieke velden bijna allemaal van het type Decimaal, terwijl je alleen integers opslaat.
Zelfs met de aanpassingen kom ik er nu ook nog niet uit, dus ik zal mijn voorbeeldje dat ik thuis heb gemaakt vanavond posten, dan zie je het werkend.
Er komt ook nog een klein probleempje bij, en dat is dat deze oplossing alleen werkt bij een tabel waarvan het eerste record niet wordt meegeteld. In jouw db heb je verschillende voertuigen, die allemaal in een periode worden geselecteerd. De oplossing werkt echter alleen voor het eerste voertuig.... Je zult er dus een iets andere constructie bij moeten hebben, bijvoorbeeld met een extra selectie op basis van Auto en periode. Omdat je gebruik maakt van een tijdelijke tabel, moet het mogelijk te zijn om een loop te maken die voor elk kenteken een eigen tabel aanmaakt met de maandgegevens. Ik zal dat proberen in te bouwen in jouw voorbeeld.
Tenzij je het liever zelf probeert?
 
Octafish,

Dank voor je inspanningen!. Ik ben zelf ook weer even verder aan het puzzelen gegaan en ben bij een eenvoudigere oplossing uitgekomen:

In het rapport heb ik de formule welke de getankte liters per auto optelt aangepast naar =Sum([getankte liters])-First([getankte liters]) en dit blijkt perfect te werken! Doordat het rapport op datum is gesorteerd gaat dit altijd goed.
Oplossing is dus uiteindelijk vrij simpel.
Nogmaals dank voor de inspanningen en het meedenken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan