Du visar en medianberäkning, men vill ha det första textvärdet du ser?
Nedan är hur du gör det. Förutsatt att du vill ha det första icke-nullvärdet, det vill säga. Om inte, måste du hålla reda på om du redan har ett värde eller inte.
Ackumulatorfunktionen skrivs som plpgsql och sql - plpgsql-funktionen låter dig använda variabelnamn och felsöka den också. Den använder helt enkelt COALESCE mot det tidigare ackumulerade värdet och det nya värdet och returnerar det första icke-nullvärdet. Så - så fort du har en icke-null i ackumulatorn ignoreras allt annat.
Du kanske också vill överväga fönsterfunktionen "first_value" för den här typen av saker om du använder en modern (8.4+) version av PostgreSQL.
http://www.postgresql.org/docs/9.1/static /functions-window.html
HTH
BEGIN;
CREATE FUNCTION remember_first(acc text, newval text) RETURNS text AS $$
BEGIN
RAISE NOTICE '% vs % = %', acc, newval, COALESCE(acc, newval);
RETURN COALESCE(acc, newval);
END;
$$ LANGUAGE plpgsql IMMUTABLE;
CREATE FUNCTION remember_first_sql(text,text) RETURNS text AS $$
SELECT COALESCE($1, $2);
$$ LANGUAGE SQL IMMUTABLE;
-- No "initcond" means we start out with null
--
CREATE AGGREGATE first(text) (
sfunc = remember_first,
stype = text
);
CREATE TEMP TABLE tt (t text);
INSERT INTO tt VALUES ('abc'),('def'),('ghi');
SELECT first(t) FROM tt;
ROLLBACK;