전체 질문 다시 작성
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로 함수에서 쿼리를 반환하려고하면 다음 오류가 발생합니다.
오류 : 쿼리 구조가 함수 결과 유형과 일치하지 않습니다. Estado de SQL : 42804 Detalhe : 리턴 된 유형 문자 변경이 열 2의 예상 유형 문자 varying (40)과 일치하지 않습니다. ) RETURN QUERY의 31 행
동일한 위키 페이지에는 위의 내용을 대체 할 함수 의 C 버전에 대한 링크가 있습니다. 설치 방법을 모르지만이 버전으로 문제를 해결할 수 있는지 궁금합니다.
한편 위의 함수를 변경하여 정확히 동일한 유형의 입력 열을 반환하는 방법이 있습니까?
DISTINCT ON
이 경우 작동하지 않습니다. 집계 함수가 아니며 실제로 데이터를 필터링하므로 한 번만 수행 할 수 있습니다.