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.