Connecting Tech Pros Worldwide Help | Site Map

Bug in queries ??

  #1  
Old November 23rd, 2005, 03:02 AM
Joost Kraaijeveld
Guest
 
Posts: n/a
Hi all,


I have three questions about 1 table

CREATE TABLE public.logs
(
rule_name varchar(32) NOT NULL,
bytes int8 NOT NULL,
pkts int8 NOT NULL,
hostname varchar(100),
that_time int4 NOT NULL
) WITH OIDS;

Question 1.

If I run the following query:

select cast(min(that_time) as abstime), cast(max(that_time) as abstime), (sum(bytes)/(1024*1024)) as "Totaal in Megabytes" from logs
where
that_time between cast( abstime('2004-10-1 00:00') as int4) and cast( abstime('2004-11-1 00:00') as int4)
and
rule_name = 'Incoming 83 50 in' or
rule_name = 'Outgoing 83 50 out'

I expect that the outcome will be between "2004-10-1 00:00" and "2004-11-1 00:00" (the month october). However, I get the following result:

min max Totaal in Megabytes
"2004-09-01 00:00:01+02" "2004-11-23 11:50:01+01"; "82768.623353004456"

The min date is the date of the first entry ever, the max entry the last entry ever. Why is this?


Question 2.

If I refrase the above query to:

select cast(min(that_time) as abstime), cast(max(that_time) as abstime), (sum(bytes)/(1024*1024)) as "Totaal in Megabytes" from logs
where
rule_name = 'Incoming 83 50 in' or
rule_name = 'Outgoing 83 50 out'
and
that_time between cast( abstime('2004-10-1 00:00') as int4) and cast( abstime('2004-11-1 00:00') as int4)

I get a diffent answer (see the Totaal in Megabytes):

min max Totaal in Megabytes
"2004-09-01 00:00:01+02" "2004-11-23 12:00:01+01" "92406.078444480896"

My question why is this?

Question 3.

Querying for just "rule_name = 'Incoming 83 50 in'" gives 34990 Megabytes, just querying for "rule_name = 'Outgoing 83 50 out'" gives 5524 Megabytes. How does that compare to the queries above?


Groeten,

Joost Kraaijeveld
Askesis B.V.
Molukkenstraat 14
6524NB Nijmegen
tel: 024-3888063 / 06-51855277
fax: 024-3608416
e-mail: J.Kraaijeveld@Askesis.nl
web: www.askesis.nl

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

  #2  
Old November 23rd, 2005, 03:02 AM
Richard Huxton
Guest
 
Posts: n/a

re: Bug in queries ??


Joost Kraaijeveld wrote:[color=blue]
>
> If I run the following query:
>
> select cast(min(that_time) as abstime), cast(max(that_time) as abstime), (sum(bytes)/(1024*1024)) as "Totaal in Megabytes" from logs
> where
> that_time between cast( abstime('2004-10-1 00:00') as int4) and cast( abstime('2004-11-1 00:00') as int4)
> and
> rule_name = 'Incoming 83 50 in' or
> rule_name = 'Outgoing 83 50 out'[/color]

Do brackets solve your problem?

WHERE that_time betweeen ...
AND (
rule_name = ...
OR rule_name = ...
)

--
Richard Huxton
Archonet Ltd

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

  #3  
Old November 23rd, 2005, 03:02 AM
Jim Seymour
Guest
 
Posts: n/a

re: Bug in queries ??


"Joost Kraaijeveld" <J.Kraaijeveld@Askesis.nl> wrote:[color=blue]
>
> Hi all,
>
>
> I have three questions about 1 table
>
> CREATE TABLE public.logs
> (
> rule_name varchar(32) NOT NULL,
> bytes int8 NOT NULL,
> pkts int8 NOT NULL,
> hostname varchar(100),
> that_time int4 NOT NULL
> ) WITH OIDS;
>
> Question 1.
>
> If I run the following query:
>
> select cast(min(that_time) as abstime), cast(max(that_time) as abstime),
> (sum(bytes)/(1024*1024)) as "Totaal in Megabytes" from logs
> where
> that_time between cast( abstime('2004-10-1 00:00') as int4) and
> cast( abstime('2004-11-1 00:00') as int4)
> and
> rule_name = 'Incoming 83 50 in' or
> rule_name = 'Outgoing 83 50 out'
>
> I expect that the outcome will be between "2004-10-1 00:00" and
> "2004-11-1 00:00" (the month october). However, I get the following result:
>
> min max Totaal in Megabytes
> "2004-09-01 00:00:01+02" "2004-11-23 11:50:01+01"; "82768.623353004456"
>
> The min date is the date of the first entry ever, the max entry the
> last entry ever. Why is this?[/color]

Because you're asking "between 1st date and second date and rule_name
equals something," OR rule_name equals something_else.

What you have is equivilent to

where (that between ... and ... and rule = ...) or rule = ...

You want

where time between ... and ... and (rule = ... or rule = ...)
[color=blue]
>
>
> Question 2.
>
> If I refrase the above query to:
>
> select cast(min(that_time) as abstime), cast(max(that_time) as abstime),
> (sum(bytes)/(1024*1024)) as "Totaal in Megabytes" from logs
> where
> rule_name = 'Incoming 83 50 in' or
> rule_name = 'Outgoing 83 50 out'
> and
> that_time between cast( abstime('2004-10-1 00:00') as int4) and
> cast( abstime('2004-11-1 00:00') as int4)
>
> I get a diffent answer (see the Totaal in Megabytes):
>
> min max Totaal in Megabytes
> "2004-09-01 00:00:01+02" "2004-11-23 12:00:01+01" "92406.078444480896"
>
> My question why is this?[/color]

You have

where rule = ... or (rule = ... and time between ...)
[color=blue]
>
> Question 3.
>
> Querying for just "rule_name = 'Incoming 83 50 in'" gives 34990
> Megabytes, just querying for "rule_name = 'Outgoing 83 50 out'" gives
> 5524 Megabytes. How does that compare to the queries above?[/color]

The answer is probably clear by now ;).

Jim

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
bug in msxml? confirmation requested. Matthias Truxa answers 19 November 18th, 2006 01:35 PM
Multiple database access Bug in adoDB and It's Solution CountDraculla answers 0 March 27th, 2006 03:45 AM
bug in query planning? Steven D.Arnold answers 6 November 12th, 2005 01:17 AM
Possible bug in MySQL for PHP? Junx answers 0 August 19th, 2005 11:35 PM