Zobrazujete výpočet mediánu, ale chcete první textovou hodnotu, kterou vidíte?
Níže je uveden postup, jak to provést. Za předpokladu, že chcete první nenulovou hodnotu, tzn. Pokud ne, budete muset sledovat, zda již hodnotu máte nebo ne.
Funkce akumulátoru je napsána jako plpgsql a sql - funkce plpgsql vám umožňuje používat názvy proměnných a také je ladit. Jednoduše použije COALESCE proti předchozí akumulované hodnotě a nové hodnotě a vrátí první nenulovou hodnotu. Takže - jakmile máte v akumulátoru non-null, vše ostatní bude ignorováno.
Můžete také zvážit funkci okna "first_value" pro tento druh věcí, pokud používáte moderní (8.4+) verzi 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;