RE: Select by priority - Mailing list pgsql-sql
From | Gary J. Farmer |
---|---|
Subject | RE: Select by priority |
Date | |
Msg-id | NDBBKNPOIKAFAGAOPAPNCEMCCBAA.farmer@arlut.utexas.edu Whole thread Raw |
In response to | Re: Select by priority (kumar1@home.com (Prasanth A. Kumar)) |
List | pgsql-sql |
>> I think the order thing will work though I have no choice of using >> numbering for the address_type as I am working off a pre-existing >> database. They are using a mnemonic char type. I am essentially batch >> downloading and processing this and other database tables for query >> and presentations using web pages. BTW, does the 'limit' feature exist >> in Oracle? The main database I am extracting data from is Oracle... I do not know whether you can add a table associating "priority" with "address_type". If you can, you might try something like the following example, using the address_priority table: create table address_table ( person_id integer, address_type varchar(1), address varchar(50) ); insert into address_table values ( 1, 'W', 'ROUTE 1, WORK ST'); insert into address_table values ( 2, 'H', 'ROUTE 2, HOME AVE'); insert into address_table values ( 3, 'W', 'ROUTE 3, WORK ST'); insert into address_table values ( 3, 'H', 'ROUTE 3,HOME AVE'); insert into address_table values ( 4, 'M', 'ROUTE 4, MAIL RD'); insert into address_table values ( 5, 'M', 'ROUTE 5, MAIL RD'); insert into address_table values ( 5, 'W', 'ROUTE 5,WORK ST'); insert into address_table values ( 6, 'M', 'ROUTE 6, MAIL RD'); insert into address_table values ( 6, 'H', 'ROUTE 6,HOME AVE'); insert into address_table values ( 7, 'M', 'ROUTE 7, MAIL RD'); insert into address_table values ( 7, 'H', 'ROUTE 7,HOME AVE'); insert into address_table values ( 7, 'W', 'ROUTE 7, WORK ST'); create table address_priority ( address_type varchar(1), priority integer ); insert into address_priority values ( 'M', 1 ); insert into address_priority values ( 'H', 2 ); insert into address_priorityvalues ( 'W', 3 ); select person_id, address from address_table a, address_priority b where (person_id, priority) in (selectperson_id, min(priority) from address_table a, address_priority b where a.address_type = b.address_type group by person_id) and a.address_type = b.address_type; PERSON_ID ADDRESS ---------- -------------------------------------------------- 1 ROUTE 1, WORK ST 2 ROUTE 2, HOME AVE 3 ROUTE 3, HOME AVE 4 ROUTE 4, MAIL RD 5 ROUTE 5, MAIL RD 6 ROUTE 6, MAIL RD 7 ROUTE 7, MAIL RD Appears to work with either Oracle or Postgres (though I changed VARCHAR to VARCHAR2 for Oracle). Gary Farmer