Vous affichez un calcul médian, mais vous voulez la première valeur textuelle que vous voyez ?
Vous trouverez ci-dessous comment procéder. En supposant que vous vouliez la première valeur non nulle, c'est-à-dire. Si ce n'est pas le cas, vous devrez vérifier si vous avez déjà une valeur ou non.
La fonction d'accumulateur est écrite comme plpgsql et sql - celle de plpgsql vous permet d'utiliser des noms de variables et de la déboguer également. Il utilise simplement COALESCE par rapport à la valeur cumulée précédente et à la nouvelle valeur et renvoie la première valeur non nulle. Donc - dès que vous avez un non-null dans l'accumulateur, tout le reste est ignoré.
Vous pouvez également envisager la fonction de fenêtre "first_value" pour ce genre de chose si vous utilisez une version moderne (8.4+) de PostgreSQL.
http://www.postgresql.org/docs/9.1/static /fonctions-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;