select

select

am 07.08.2004 13:54:28 von k.p.lehre

I have a table with fields:
id A B C D E F
where id is an int4 primary key.
In this table there is information like:
1 a1 b1 xxx xxx
2 a1 b1 xxx xxx xxx xxx
3 a2 b2 xxx xxx xxx xxx
4 a2 b2 xxx xxx xxx xxx
5 a3 b3 xxx xxx xxx
6 a3 b3 xxx xxx xxx xxx
7 a3 b3 xxx xxx xxx xxx
8 a4 b4 xxx xxx xxx xxx
9 a1 b1 xxx
10 a3 b3 xxx
11 a1 b3 xxx
where xxx represents any information.
My problem is: I only want to select one of the records which have the same
combination of information in fields A and B, and that should be the record
with the lowest id. Thus, the resultset should be:
1 a1 b1 xxx xxx
3 a2 b2 xxx xxx xxx xxx
5 a3 b3 xxx xxx xxx
8 a4 b4 xxx xxx xxx xxx
11 a1 b3 xxx
Importantly, I might not want the selected records listed in order of increasing
id. They might be sorted according to the data in e.g. the C field.

Suggestions/comments greatly appreciated.


---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Re: select

am 09.08.2004 16:53:41 von ch

Knut P Lehre wrote:

> I have a table with fields:
> id A B C D E F
> where id is an int4 primary key.
> In this table there is information like:
> 1 a1 b1 xxx xxx
> 2 a1 b1 xxx xxx xxx xxx
> 3 a2 b2 xxx xxx xxx xxx
> 4 a2 b2 xxx xxx xxx xxx
> 5 a3 b3 xxx xxx xxx
> 6 a3 b3 xxx xxx xxx xxx
> 7 a3 b3 xxx xxx xxx xxx
> 8 a4 b4 xxx xxx xxx xxx
> 9 a1 b1 xxx
> 10 a3 b3 xxx
> 11 a1 b3 xxx
> where xxx represents any information.
> My problem is: I only want to select one of the records which have the same
> combination of information in fields A and B, and that should be the record
> with the lowest id. Thus, the resultset should be:
> 1 a1 b1 xxx xxx
> 3 a2 b2 xxx xxx xxx xxx
> 5 a3 b3 xxx xxx xxx
> 8 a4 b4 xxx xxx xxx xxx
> 11 a1 b3 xxx
> Importantly, I might not want the selected records listed in order of increasing
> id. They might be sorted according to the data in e.g. the C field.
>
> Suggestions/comments greatly appreciated.
>

Does this give you the result you are looking for?
SELECT * FROM (
SELECT DISTINCT ON (A,B) * FROM table ORDER BY id
) AS foo ORDER BY C ;

Regards, Christoph



---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)