The above implementation of "first" aggregate returns the first non-NULL item value.
To get *first row item value* for a column use the below implementation. -- create a function that push at most two element on given array -- push the first row value at second index of the array CREATE OR REPLACE FUNCTION two_value_holder(anyarray, anyelement) returns anyarray as $$ select case when array_length($1,1) < 2 then array_append($1,$2) else $1 end ; $$ language sql immutable; -- create a function that returns second element of an array CREATE OR replace FUNCTION second_element (ANYARRAY) RETURNS ANYELEMENT AS $$ SELECT $1[2]; $$ LANGUAGE SQL; -- create first aggregate function that return first_row item value CREATE AGGREGATE first(anyelement)( SFUNC=two_value_holder, STYPE=ANYARRAY, INITCOND='{NULL}', FINALFUNC=second_element ); I hope this work.. -- Sudalai ----- sudalai -- View this message in context: http://postgresql.nabble.com/First-Aggregate-Funtion-tp1943031p5857866.html Sent from the PostgreSQL - hackers mailing list archive at Nabble.com. -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers