Thread: avg(interval)

avg(interval)

From
"Jeremiah Elliott"
Date:
I am getting some really strange query output. I am trying to average an
interval. The problem is that the interval average is sometimes
returning more than 24 hours for the average.

query:
select avg(scan_date -  backflush_date) as time_diff,
substring(pt_article, 1, 5) as clan, sum(qty) as units
from carton_master
join outbound on master_number = master_id
join pt_mstr on product = pt_part  where
scan_date::date  between '2006-06-01'::date and '2006-07-01'::date
and  substring(pt_article, 1, 5) = '*2420'
group by clan

output:
4 days 33:48:13.994333   *2420   25



however if i don't average them here is what i get:
query:
select (scan_date -  backflush_date) as time_diff,
substring(pt_article, 1, 5) as clan
from carton_master
join outbound on master_number = master_id
join pt_mstr on product = pt_part  where
scan_date::date  between '2006-06-01'::date and '2006-07-01'::date
and  substring(pt_article, 1, 5) = '*2420'

output:
"7 days 22:24:50.62311";"*2420"
"9 days 22:21:02.683393";"*2420"
"23:21:35.458459";"*2420"
"4 days 22:47:41.749756";"*2420"
"3 days 06:05:59.456947";"*2420"



which should average to just over nine days -
Assuming I am not missing something huge here. I tend to think its a bug
in avg(interval) postgres function.

I am running postgres 8.1.3 on 32bit suse

Thanks
Jeremiah Elliott


Re: avg(interval)

From
Tom Lane
Date:
"Jeremiah Elliott" <geek00@gmail.com> writes:
> however if i don't average them here is what i get:
> "7 days 22:24:50.62311";"*2420"
> "9 days 22:21:02.683393";"*2420"
> "23:21:35.458459";"*2420"
> "4 days 22:47:41.749756";"*2420"
> "3 days 06:05:59.456947";"*2420"

> which should average to just over nine days -

Uh ... how do you arrive at that conclusion?  I haven't done the math,
but by eyeball an average of four-something days doesn't look out of
line for those values.
        regards, tom lane


Re: avg(interval)

From
Joe
Date:
Tom Lane wrote:
> "Jeremiah Elliott" <geek00@gmail.com> writes:
>> however if i don't average them here is what i get:
>> "7 days 22:24:50.62311";"*2420"
>> "9 days 22:21:02.683393";"*2420"
>> "23:21:35.458459";"*2420"
>> "4 days 22:47:41.749756";"*2420"
>> "3 days 06:05:59.456947";"*2420"
> 
>> which should average to just over nine days -
> 
> Uh ... how do you arrive at that conclusion?  I haven't done the math,
> but by eyeball an average of four-something days doesn't look out of
> line for those values.

It seems he's calculating (7 + 9 + 23 + 4 + 3) / 5 ...

Joe


Re: avg(interval)

From
"Aaron Bono"
Date:
Right, the 23 is just less than 1 day, not 23 days.

The good news: your query is working!

-Aaron

On 6/26/06, Joe < dev@freedomcircle.net> wrote:
Tom Lane wrote:
> "Jeremiah Elliott" < geek00@gmail.com> writes:
>> however if i don't average them here is what i get:
>> "7 days 22:24:50.62311";"*2420"
>> "9 days 22:21: 02.683393";"*2420"
>> "23:21:35.458459";"*2420"
>> "4 days 22:47:41.749756";"*2420"
>> "3 days 06:05:59.456947";"*2420"
>
>> which should average to just over nine days -
>
> Uh ... how do you arrive at that conclusion?  I haven't done the math,
> but by eyeball an average of four-something days doesn't look out of
> line for those values.

It seems he's calculating (7 + 9 + 23 + 4 + 3) / 5 ...

Joe

Re: avg(interval)

From
Erik Jones
Date:
Well, the query is working ok numerically, but should the answer really 
be reported as 4 days and 33 hours?

Erik

Aaron Bono wrote:
> Right, the 23 is just less than 1 day, not 23 days.
>
> The good news: your query is working!
>
> -Aaron
>
> On 6/26/06, *Joe* < dev@freedomcircle.net 
> <mailto:dev@freedomcircle.net>> wrote:
>
>     Tom Lane wrote:
>     > "Jeremiah Elliott" < geek00@gmail.com <mailto:geek00@gmail.com>>
>     writes:
>     >> however if i don't average them here is what i get:
>     >> "7 days 22:24:50.62311";"*2420"
>     >> "9 days 22:21: 02.683393";"*2420"
>     >> "23:21:35.458459";"*2420"
>     >> "4 days 22:47:41.749756";"*2420"
>     >> "3 days 06:05:59.456947";"*2420"
>     >
>     >> which should average to just over nine days -
>     >
>     > Uh ... how do you arrive at that conclusion?  I haven't done the
>     math,
>     > but by eyeball an average of four-something days doesn't look
>     out of
>     > line for those values.
>
>     It seems he's calculating (7 + 9 + 23 + 4 + 3) / 5 ...
>
>     Joe
>


-- 
erik jones <erik@myemma.com>
software development
emma(r)



Re: avg(interval)

From
Joe
Date:
Erik Jones wrote:
> Well, the query is working ok numerically, but should the answer really 
> be reported as 4 days and 33 hours?

Well, the original poster didn't provide the table schema or PG version, 
but on PG 8.0.3 both with intervals or with differences between 
timestamps, the query appears to work OK:

test=> select * from x;        t
----------------- 7 days 22:24:00 9 days 22:21:00 23:21:00 4 days 22:47:00 3 days 06:05:00
(5 rows)

test=> select avg(t) from x;       avg
----------------- 5 days 09:47:36
(1 row)

test=> select * from x2;          t
--------------------- 2006-06-07 22:24:00 2006-06-09 22:21:00 2006-05-31 23:21:00 2006-06-04 22:47:00 2006-06-03
06:05:00
(5 rows)

test=> select avg(t - '2006-5-31 0:0'::timestamp) from x2;       avg
----------------- 5 days 09:47:36
(1 row)

Joe