Вы показываете медианное вычисление, но хотите первое текстовое значение, которое вы видите?
Ниже описано, как это сделать. Предполагая, что вы хотите первое ненулевое значение, то есть. Если нет, вам нужно будет отслеживать, есть ли у вас значение или нет.
Функция накопителя записана в виде plpgsql и sql - функция plpgsql позволяет вам использовать имена переменных и отлаживать их тоже. Он просто использует COALESCE против предыдущего накопленного значения и нового значения и возвращает первое ненулевое значение. Итак, как только у вас в аккумуляторе есть ненулевое значение, все остальное игнорируется.
Вы также можете рассмотреть оконную функцию first_value для такого рода вещей, если вы используете современную (8.4+) версию PostgreSQL.
http://www.postgresql.org/docs/9.1/static/functions-window.html
НТН
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;