Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Re: Re: Re: Re: Funky date question.

by da (Friar)
on Jun 09, 2001 at 16:01 UTC ( [id://87180]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Re: Re: Funky date question.
in thread Funky date question.

A few questions:

1) have you tried 'print' statements to see what's going on inside the loop?

2) With your code, if your database contains more than one ID, you will compare two different IDs at the boundry between them, which is probably not what you want.

3) what are the proper behaviors at each state transition? If I understood your description, to get the open time minus the hold time, they should be:

open -> open = add open -> hold = add open -> closed = add hold -> open = sub hold -> hold = ignore hold -> closed = sub closed -> open = ignore closed -> hold = ignore closed -> closed = ignore
In other words,
open -> anything = add closed -> anything = ignore hold -> hold = ignore hold -> open/closed = sub

It's clear that your code isn't doing that, but I'm not sure if my understanding of the problem is wrong. BEFORE you start coding, it needs to be clear what the problem is...

Here's a stab at what I think you're looking for, based on the above state diagram:

my $dbh = DBI->connect("dbi:Sybase:server=CASTOR",$USER, $PASS); my $select = "select entrydate,status, id from database order by id, entrydate"; my $sth=$dbh->prepare($select); $sth->execute; my ($entrydate, $statusid, $objectid) = $sth->fetchrow; my ($nentrydate, $nstatusid, $nobjectid); while ( my $row = $sth->fetchrow_arrayref) { ($nentrydate, $nstatusid, $nobjectid) = ($entrydate, $statusid, $objectid); ($entrydate, $statusid, $objectid) = @$row; # "closed" status can be ignored next if ($nstatusid eq "closed"); if ($nobjectid eq $objectid) { # object ids can be compared if ($nstatusid eq "start") { $CUSTHOLD += parse_date($entrydate) - parse_date($nentrydate); } else { # $nstatusid eq "hold" if ($statusid ne "hold") { $CUSTHOLD -= parse_date($entrydate) - parse_date($nentrydate); } } } else { # object ids cannot be compared $NOW = time; # time in same format as returned by parse_date if ($nstatusid eq "start") { $CUSTHOLD += $NOW - parse_date($nentrydate); } else { # $nstatusid eq "hold" if ($statusid ne "hold") { $CUSTHOLD -= $NOW - parse_date($nentrydate); } } } } return $CUSTHOLD;

___
-DA

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://87180]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (3)
As of 2024-03-29 15:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found