完整问题重写
我在寻找First()聚合函数。
在这里,我发现了几乎可行的方法:
CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement )
RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$
SELECT $1;
$$;
-- And then wrap an aggregate around it
CREATE AGGREGATE public.first (
sfunc = public.first_agg,
basetype = anyelement,
stype = anyelement
);
问题在于,当varchar(n)列通过first()函数时,它将转换为简单的varchar(无大小)。尝试以函数RETURNS SETOF anyelement的形式返回查询时,出现以下错误:
错误:查询的结构与函数结果类型不匹配Estado de SQL:42804 Detalhe:返回的类型字符变化与第2列中的预期类型字符变化(40)不匹配。 )第31行,位于RETURN QUERY
在同一个Wiki页面中,有指向该版本的函数的C版本的链接。我不知道如何安装它,但是我想知道这个版本是否可以解决我的问题。
同时,有没有一种方法可以更改上述函数,使其返回与输入列完全相同的类型?
DISTINCT ON
则在这种情况下将不起作用。它不是聚合函数,实际上是在过滤数据,因此只能执行一次。