>>  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_priority values ( 'W', 3 );

    select person_id, address
    from address_table a, address_priority b
    where
      (person_id, priority) in
        (select person_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

Reply via email to