Rekenen met tijdsduren (aftrekken en delen)

Status
Niet open voor verdere reacties.

Billybob49

Gebruiker
Lid geworden
12 apr 2007
Berichten
12
Hoi,
Ik heb het volgende probleem.
In een Access database heb ik een tabel met 3 kolommen. De eerste 2 geven een tijdslengte weer van hoelang iemand ergens mee bezig geweest is. Verkopen = numeriek.

Tijdsduur 1 Tijdsduur 2 Verkopen
Persoon A 4:09:43 0:21:44 10
Persoon B 3:46:08 0:15:28 6

De velden Tijdsduur 1 en Tijdsduur 2 staan momenteel in Text format. Dat staan ze sowieso want ze zijn het resultaat van export vanuit een ERP systeem. (csv file)

Ik wil nu het aantal verkopen per uur uitrekenen. Daartoe moet in dit geval Tijdsuur 2 eerst van Tijdsduur 1 afgetrokken worden. Vervolgens moeten de verkopen door het resultaat hiervan gedeeld worden. (Verkopen per uur uitrekenen)

Hoe kan ik dit het beste aanpakken ?

Bij voorbaat dank.

Billybob
 
Met enkele bijwerkqueries

Maak twee velden aan type datum tijd (notatie hh:nn:ss) bv Tijd1 en Tijd 2. Dan nog 2 nieuwe velden type datum tijd (hh:nn:ss) die we PerUur en Gemiddelde noemen. Nu maken we bijwerkQuerie 1 die Tijd 1 en Tijd2 vult met jou oude twee tekstkolommen. BijwerkQuerie2 wijzigt PerUur in de uitkomst: Tijd1 - Tijd2. BijwerkQuerie3 wijzigt Gemiddelde in de uitkomst van PerUur/verkopen. Zet de queries achter elkaar in een macro en Klaar (zie bijlage). Suc6
 

Bijlagen

Maak twee velden aan type datum tijd (notatie hh:nn:ss) bv Tijd1 en Tijd 2. Dan nog 2 nieuwe velden type datum tijd (hh:nn:ss) die we PerUur en Gemiddelde noemen. Nu maken we bijwerkQuerie 1 die Tijd 1 en Tijd2 vult met jou oude twee tekstkolommen. BijwerkQuerie2 wijzigt PerUur in de uitkomst: Tijd1 - Tijd2. BijwerkQuerie3 wijzigt Gemiddelde in de uitkomst van PerUur/verkopen. Zet de queries achter elkaar in een macro en Klaar (zie bijlage). Suc6



Hoi Annemarie !
Bedankt ! Dit werkt, althans voor tijdsduren < 24 uur. Hoe ga ik om met tijdsduren groter dan 24 uur ? Ik heb er ook tijdsduren tussen staan van bijvoorbeeld 26:03:02 en 65:02:05

Gr
William
 
Dan omrekenen naar de kleinste eenheid

Dan zul je alles moeten omrekenen naar de kleinste eenheid en dat is de seconde. Dus met iets van Left, de uren er uithalen, Mid de minuten en Right de seconden. De numerieke velden omrekenen naar seconden (bijwerkqueries). Tijd2 (ook omgerekend naar seconden) er vanaf trekken en het resultaat delen door de verkopen. Dan hou je nog een handvol seconden over (in een numeriek veld) die je weer omrekent naar hh:nn:ss formaat. Dat doe je met: DateAdd('s';[gemiddelde];"0"). Helaas ontbreekt me de tijd om het voor te doen maar je weet nu in welke richting je moet zoeken. Suc6
 
Laatst bewerkt:
Toch nog een voorbeeldje

Toch nog even tijd gevonden voor een voorbeeldje. Zijn wel veel bijwerkqueries achter elkaar geworden (11 stuks). Ik heb aparte velden gemaakt zodat je per querie kunt volgen wat er veranderd in je tabel. Ik heb bij de extractie van de uren en minuten rekening gehouden met de lengte van de tijdvelden. Lengte 8 (01:01:01) of lengte 7 (1:01:01). Mocht je tijdveld altijd lengte 8 hebben dan kun je nog twee queries overslaan. In macro1 staan de queries achter elkaar.
Er is nog 1 probleem waar je misschien tegen aan loopt. Als je gemiddelde boven de 86400 seconden uitkomt (=>24 uur). Ik zou de oplossing wel weten. Een verkoper die meer dan 24 uur over een verkoop doet automatisch een ontslagbrief sturen! Veel plezier.
 

Bijlagen

Hallo,

en hier een voorbeeldje waarmee je met 1 query je verkopen per uur kan zien.

Groet,

Tardis
 

Bijlagen

Toch nog even tijd gevonden voor een voorbeeldje. Zijn wel veel bijwerkqueries achter elkaar geworden (11 stuks). Ik heb aparte velden gemaakt zodat je per querie kunt volgen wat er veranderd in je tabel. Ik heb bij de extractie van de uren en minuten rekening gehouden met de lengte van de tijdvelden. Lengte 8 (01:01:01) of lengte 7 (1:01:01). Mocht je tijdveld altijd lengte 8 hebben dan kun je nog twee queries overslaan. In macro1 staan de queries achter elkaar.
Er is nog 1 probleem waar je misschien tegen aan loopt. Als je gemiddelde boven de 86400 seconden uitkomt (=>24 uur). Ik zou de oplossing wel weten. Een verkoper die meer dan 24 uur over een verkoop doet automatisch een ontslagbrief sturen! Veel plezier.


Hoi Anne-Marie,
Hartelijk dank voor je inspanningen. Dit werkt. !
Gr
BB
 
Hallo,

en hier een voorbeeldje waarmee je met 1 query je verkopen per uur kan zien.

Groet,

Tardis

Hoi Tardis,
Bedankt ! Ik zit me af te vragen of er geen VBA script is waarmee je een functie aan kunt roepen die dit automatisch regelt. Die lange formules werken weliswaar wel, maar met een functie ben je flexibeler. Weet jij deze toevallig ? Ik vind het thema rekenen met tijden en tijdsduren in Access sowieso een issue daar hier door de makers niet goed over nagedacht is vind ik. Waarom niet gewoon een gegevenstype tijdsduur ?
Gr
BB
 
zit me af te vragen of er geen VBA script is waarmee je een functie aan kunt roepen die dit automatisch regelt

Hallo,

dat kan, door in VBA een funktie te schrijven.
Dat moet je even zelf doen.

Groet,

Tardis
 
Hallo,

dat kan, door in VBA een funktie te schrijven.
Dat moet je even zelf doen.

Groet,

Tardis

Hoi,
Ja natuurlijk. Da's een open deur. Maar hoe doe ik dat ? Want ik weet niet hoe dat moet. heb alleen van horen zeggen. Heb je tips waar ik die kennis op kan doen ?
Bedankt
Gr
BB
 
Hallo,

je kan boeken raadplegen (en nee, zou niet weten welke, nooit gebruikt), VBA forums raadplegen (schijnt dat Helpmij een VBA sektie heeft :D ) en/of naar voorbeelddatabases kunnen kijken.

VBA Help bevat ook aardig wat info.

Groet,

Tardis
 
Hoi,
Ik heb dit draadje met aandacht gelezen omdat ik hetzelfde probleem heb. Ik kom er echter niet uit ook niet via andere draadjes waarin een verwijzing zit naar rekenen met tijd in access.
Ook bij mij worden twee tijden afgetrokken. Een eindtijd - een starttijd.
Ik heb ze in de data base staan als datum/tijd met korte notatie
trek ik nu met een ijwerkquery de tijden van elkaar af krijg ik bijvoorbeeld
12:36 - 11:06 en als antwoord 0,0625 in de query,terwijl dat 1:30 had moeten zijn
Een bijwerk query kan ik er niet van maken want dan krijg ik de foutmelding dat minstens een uitvoerveld gegeven moet zijn.
de sql tekst is :
SELECT productiestaten.Id, productiestaten.starttijd, productiestaten.eindtijd, ([eindtijd]-[starttijd]) AS berekendetijd
FROM productiestaten;

waar zit ik fout
 
Gebruik datediff en je krijg het aantal minuten terug waar je een truuk mee moet uithalen:
Code:
?datediff("n",#11:06#,#12:36#)\60 & ":" & datediff("n",#11:06#,#12:36#) mod 60
Of in een query:
Code:
SELECT productiestaten.Id, productiestaten.starttijd, productiestaten.eindtijd, (datediff("n",[starttijd],[eindtijd])\60 & ":" & datediff("n",[starttijd],[eindtijd]) mod 60) AS berekendetijd
FROM productiestaten;

Enjoy!

Volgende keer even zelf een vraag starten. Weet je wel hoeveel slapende honden je hiermee wakker maakt?:rolleyes:
 
Laatst bewerkt:
Bedankt. dat werkt.
tenminste, het bijwerken wil nog niet zo lukken maar de tijden staan nu goed.
De volgende keer zal ik een apart draadje openen en de honden laten slapen. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan