Du viser en medianberegning, men vil have den første tekstværdi, du ser?
Nedenfor er hvordan man gør det. Forudsat at du vil have den første ikke-nul værdi, dvs. Hvis ikke, skal du holde styr på, om du allerede har en værdi eller ej.
Akkumulatorfunktionen er skrevet som plpgsql og sql - plpgsql en lader dig bruge variabelnavne og også fejlsøge den. Den bruger simpelthen COALESCE mod den tidligere akkumulerede værdi og den nye værdi og returnerer den første ikke-nul. Så - så snart du har en ikke-nul i akkumulatoren bliver alt andet ignoreret.
Du kan også overveje vinduesfunktionen "first_value" til denne slags ting, hvis du bruger en moderne (8.4+) version af 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;