/* * FUNCTIONAL TESTS */ create extension if not exists argm; create table tbl as select d, i, grp::text || '-' || d || '-' || repeat(i::text, 10) txt, grp from ( select date'2011-11-11' - generate_series(1, 8) d, generate_series(1, 9) i order by random() ) _ cross join (values (1), (2), (3) ) grp (grp); analyze tbl; select grp, argmax(txt, i, d), argmin(array[txt], (i, d)) from tbl group by grp order by grp; grp | argmax | argmin -----+-------------------------+--------------------------- 1 | 1-11-10-2011-9999999999 | {1-11-03-2011-1111111111} 2 | 2-11-10-2011-9999999999 | {2-11-03-2011-1111111111} 3 | 3-11-10-2011-9999999999 | {3-11-03-2011-1111111111} (3 rows)