Estás mostrando un cálculo de la mediana, pero ¿quieres el primer valor de texto que ves?
A continuación se muestra cómo hacerlo. Suponiendo que desea el primer valor no nulo, es decir. De lo contrario, deberá realizar un seguimiento de si ya tiene un valor o no.
La función del acumulador está escrita como plpgsql y sql; la plpgsql le permite usar nombres de variables y depurarlos también. Simplemente usa COALESCE contra el valor acumulado anterior y el nuevo valor y devuelve el primer no nulo. Entonces, tan pronto como tenga un valor no nulo en el acumulador, todo lo demás se ignorará.
También puede considerar la función de ventana "first_value" para este tipo de cosas si tiene una versión moderna (8.4+) de PostgreSQL.
http://www.postgresql.org/docs/9.1/static /funciones-ventana.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;