CREATE FUNCTION r_median(double precision[]) RETURNS double precision AS ' median(arg1) ' LANGUAGE plr; CREATE AGGREGATE median ( BASETYPE = double precision, SFUNC = plr_array_accum, STYPE = double precision[], FINALFUNC = r_median ); CREATE FUNCTION invisible_speakers() RETURNS SETOF text AS ' SELECT username FROM (SELECT userid FROM chatter AS c, ( SELECT MAX( inserted ) AS s FROM other_users ) as s, ( SELECT MAX( inserted ) AS f FROM current_other_users ) AS f WHERE c.inserted BETWEEN s.s AND f.f EXCEPT SELECT userid FROM current_other_users) AS i JOIN users USING (userid); ' LANGUAGE sql STABLE;