Anda menunjukkan penghitungan median, tetapi ingin nilai teks pertama yang Anda lihat?
Di bawah ini adalah cara melakukannya. Dengan asumsi Anda menginginkan nilai non-null pertama, yaitu. Jika tidak, Anda harus melacak apakah Anda sudah mendapatkan nilai atau belum.
Fungsi akumulator ditulis sebagai plpgsql dan sql - fungsi plpgsql memungkinkan Anda menggunakan nama variabel dan men-debugnya juga. Itu hanya menggunakan COALESCE terhadap nilai akumulasi sebelumnya dan nilai baru dan mengembalikan non-null pertama. Jadi - segera setelah Anda memiliki non-null di akumulator, semuanya akan diabaikan.
Anda mungkin juga ingin mempertimbangkan fungsi jendela "first_value" untuk hal semacam ini jika Anda menggunakan PostgreSQL versi modern (8.4+).
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;