Tam soru yeniden yazma
Bir First () toplama işlevi arıyorum.
Burada neredeyse işe yarayan bir şey buldum:
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
);
Sorun, bir varchar (n) sütunun ilk () işlevinden geçtiğinde, basit varchar'a (boyutsuz) dönüştürülmesidir. Bir işlevde RETURNS SETOF anyelement olarak sorguyu döndürmeye çalışırken, aşağıdaki hatayı alıyorum:
HATA: Sorgunun yapısı işlev sonuç türüyle eşleşmiyor SQL: 42804 Detalhe: Döndürülen tür karakteri, sütun 2'de beklenen tür karakter değişikliğiyle (40) eşleşmiyor. Contexto: PL / pgSQL işlevi vsr_table_at_time (herhangi bir zaman dilimi, zaman dilimi olmadan zaman damgası) ) 31 numaralı satırda RETURN QUERY
Aynı wiki sayfasında , yukarıdaki fonksiyonun yerine geçecek olan fonksiyonun C Sürümü bağlantısı vardır . Nasıl yükleyeceğimi bilmiyorum, ama bu sürümün sorunumu çözüp çözemeyeceğini merak ediyorum.
Bu arada, yukarıdaki işlevi aynı giriş sütunu türünü döndürecek şekilde değiştirebileceğim bir yol var mı?
DISTINCT ON, bu durumda çalışmaz. Bu bir toplama işlevi değil, aslında verileri filtreliyorsunuz ve böylece yalnızca bir kez yapabilirsiniz.