Thread: sql interogation

sql interogation

From
"cristivoinicaru"
Date:
I have a postgres table like this:

CREATE TABLE "temp50" (
 "gc" character varying(36),
 "co" character varying(7),
 "data" date,
 "ora" smallint

);

It contains the following records:

5003707G9G9419 22012BB 10-14-2004 82
5003707G9G9419 22012BC 10-14-2004 44
5003707G9G9419 22022BB 10-14-2004 82
5003707G9G9420 22022BC 10-18-2004 49

I'd  like the result of the sql interogation to be like this:

5003707G9G9419 22012BB 10-14-2004 82
5003707G9G9420 22022BC 10-18-2004 49


Explanations:
I want like sql interogation to select only one record from each "gc" group
record (who has the same code "gc" (that means that the "gc" field will be
unique key)) with the following two condition:
1)from each "gc" group of records to select the record who has the value of
"ora" field maxim.
2)if two ore more record have the same value of the maxim value of the "ora"
to select oly one of them

Thanks!


Re: sql interogation

From
Steven Klassen
Date:
* cristivoinicaru <cristivoinicaru@dmhi.ct.ro> [2004-10-25 10:05:22 +0200]:

> Explanations:

> I want like sql interogation to select only one record from each
> "gc" group record (who has the same code "gc" (that means that the
> "gc" field will be unique key)) with the following two condition:
>
> 1)from each "gc" group of records to select the record who has the
> value of "ora" field maxim.
>
> 2)if two ore more record have the same value of the maxim value of
> the "ora" to select oly one of them

Try this out; this is from memory, so it hasn't been tested.

SELECT DISTINCT max(gc), co, data, ora FROM temp50 GROUP BY co, data, ora;

--
Steven Klassen - Lead Programmer
Command Prompt, Inc. - http://www.commandprompt.com/
PostgreSQL Replication & Support Services, (503) 667-4564

Re: sql interogation

From
Tom Lane
Date:
"cristivoinicaru" <cristivoinicaru@dmhi.ct.ro> writes:
> I want like sql interogation to select only one record from each "gc" group
> record (who has the same code "gc" (that means that the "gc" field will be
> unique key)) with the following two condition:
> 1)from each "gc" group of records to select the record who has the value of
> "ora" field maxim.
> 2)if two ore more record have the same value of the maxim value of the "ora"
> to select oly one of them

I don't think you can do (2) very nicely in standard SQL, because the
results aren't fully defined and the SQL standard does not like poorly
defined behaviors ;-).  However there is a nonstandard extension in
Postgres that is exactly what you need: SELECT DISTINCT ON.  See the
"weather reports" example in the SELECT reference page --- your "gc"
corresponds to weather stations and "ora" to report date.

            regards, tom lane