Wyświetlasz obliczenie mediany, ale chcesz wyświetlić pierwszą wartość tekstową?
Poniżej znajduje się, jak to zrobić. Zakładając, że potrzebujesz pierwszej wartości innej niż null. Jeśli nie, musisz śledzić, czy masz już wartość, czy nie.
Funkcja akumulatora jest napisana jako plpgsql i sql - plpgsql pozwala używać nazw zmiennych i debugować je. Po prostu używa COALESCE w stosunku do poprzedniej skumulowanej wartości i nowej wartości i zwraca pierwszą wartość inną niż null. Tak więc - jak tylko w akumulatorze pojawi się wartość niezerowa, wszystko inne zostanie zignorowane.
Możesz również rozważyć funkcję okna "first_value" dla tego rodzaju rzeczy, jeśli korzystasz z nowoczesnej (8.4+) wersji 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;