<jabbott@stripped> wrote on 10/24/2005 12:48:32 AM:
> I have a table doing time tracking. I don't use timestamps, I use
> datetime fields to record punch in times and punch out times. I
> have this query that computes the amount of time between a punch in
> and punch out:
> select SEC_to_time(unix_timestamp(TTendTime) -
> as endtime
> FROM TimeTracking
> WHERE TTperson = 1
> and date(TTstartTime) = '2005-10-19'
> And this works great except for when people punch in and out several
> times in one day. Is there any way I can total a number of records
> into one total time? In this example case, I am TTperson #1 and I
> punched in and out five times this day.
> I know I can do it in the code, but if I can do it in sql, life
> would be better for me.
Let's do some basic algebra:
et = end time
st = start time
Total time = (et1 - st1) + (et2 - st2) + ... + (etN - stN)
Where N = how many clock-ins and clock outs they had.
We can rewrite this as
TT = et1 - st1 + et2 - st2 + ... etN - stN
= et1 + et2 + ... etN - st1 - st2 - ... - stN
= et1 + et2 + ... etN - (st1 + st2 + ... + stN)
This translated to SQL as:
select SEC_to_time(SUM(unix_timestamp(TTendTime)) -
WHERE TTperson = 1
and date(TTstartTime) = '2005-10-19'
The only issue will be if there is a mismatch between # of clock-ins and #
of clock-outs (person is currently on the clock or they checked out on the
following day, perhaps). That's something you are going to need to build a
little logic to handle but this should help you get started.
Unimin Corporation - Spruce Pine