Обсуждение: picking max from list
I have a query that produces results similar to this:
run# rd_pk group#
0 9209 5
1 9209 8
0 9520 2
1 9520 5
0 9520 etc....
0 8652
1 8652
2 8652
0 8895
1 8894
Ultimately I want to know the group number for EACH rd_pk with the highest run number. Can this be done in one query? Or will I need to code with a loop?
Thanks
Jodi
run# rd_pk group#
0 9209 5
1 9209 8
0 9520 2
1 9520 5
0 9520 etc....
0 8652
1 8652
2 8652
0 8895
1 8894
Ultimately I want to know the group number for EACH rd_pk with the highest run number. Can this be done in one query? Or will I need to code with a loop?
Thanks
Jodi
--
_______________________________
Jodi L Kanter
BioInformatics Database Administrator
University of Virginia
(434) 924-2846
jkanter@virginia.edu
On Wed, Dec 10, 2003 at 15:37:10 -0500, Jodi Kanter <jkanter@virginia.edu> wrote: > I have a query that produces results similar to this: > > run# rd_pk group# > 0 9209 5 > 1 9209 8 > 0 9520 2 > 1 9520 5 > 0 9520 etc.... > 0 8652 > 1 8652 > 2 8652 > 0 8895 > 1 8894 > > Ultimately I want to know the group number for EACH rd_pk with the > highest run number. Can this be done in one query? Or will I need to > code with a loop? > Thanks You can do this using the postgres distinct on extension. The query would look something like: select distinct on (rd_pk) run, rd_pk, group from table_name order by run desc;
select group,rd_pk from (select ...) as your_query,(select max(run) as max_run,rd_pk as rdfrom (select ...) as your_query) as max_rd where rd = rd_pk and max_run = run; I dont know if you call that one query but it should work. There may be more elegant solutions, but I havn't had a chance to read up on the new join types. Good luck Jodi Kanter wrote: > I have a query that produces results similar to this: > > run# rd_pk group# > 0 9209 5 > 1 9209 8 > 0 9520 2 > 1 9520 5 > 0 9520 etc.... > 0 8652 > 1 8652 > 2 8652 > 0 8895 > 1 8894 > > Ultimately I want to know the group number for EACH rd_pk with the > highest run number. Can this be done in one query? Or will I need to > code with a loop? > Thanks > Jodi -- Guy Fraser Network Administrator