Ponowne napisanie pełnego pytania
Szukam funkcji agregującej First ().
Tutaj znalazłem coś, co prawie działa:
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
);
Problem polega na tym, że gdy kolumna varchar (n) przechodzi przez pierwszą funkcję (), jest konwertowana na prosty varchar (bez rozmiaru). Próbuję zwrócić zapytanie w funkcji jako ZWRACAĆ SETOF anyelement, otrzymuję następujący błąd:
BŁĄD: struktura zapytania nie zgadza się z typem wyniku funkcji Estado de SQL: 42804 Detalhe: Zmienna postać zwracanego typu nie pasuje do oczekiwanej zmienności typu (40) w kolumnie 2. Kontekst: Funkcja PL / pgSQL vsr_table_at_time (dowolny element, znacznik czasu bez strefy czasowej ) wiersz 31 w ZWROTNEJ KWESTII
Na tej samej stronie wiki znajduje się link do wersji C funkcji , która zastąpiłaby powyższą. Nie wiem, jak go zainstalować, ale zastanawiam się, czy ta wersja mogłaby rozwiązać mój problem.
Czy w międzyczasie mogę zmienić powyższą funkcję, aby zwracała dokładnie ten sam typ kolumny wejściowej?
DISTINCT ON
nie zadziała w tym przypadku. To nie jest funkcja agregująca, w rzeczywistości filtrujesz dane, więc możesz to zrobić tylko raz.