Vollständige Frage neu schreiben
Ich suche nach einer First () - Aggregatfunktion.
Hier habe ich etwas gefunden, das fast funktioniert:
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
);
Das Problem ist, dass eine varchar (n) -Spalte, die die first () -Funktion durchläuft, in eine einfache varchar (ohne Größe) konvertiert wird. Beim Versuch, die Abfrage in einer Funktion als RETURNS SETOF anyelement zurückzugeben, wird die folgende Fehlermeldung angezeigt:
FEHLER: Die Struktur der Abfrage stimmt nicht mit dem Ergebnistyp der Funktion überein. SQL-Status: 42804 Detalhe: Die zurückgegebene Zeichenvariation stimmt nicht mit der erwarteten Zeichenvariation (40) in Spalte 2 überein. Kontext: PL / pgSQL-Funktion vsr_table_at_time (beliebiges Element, Zeitstempel ohne Zeitzone ) Zeile 31 bei RETURN QUERY
Auf derselben Wiki-Seite befindet sich ein Link zu einer C-Version der Funktion , die die oben genannten ersetzen würde. Ich weiß nicht, wie ich es installieren soll, aber ich frage mich, ob diese Version mein Problem lösen könnte.
Gibt es eine Möglichkeit, die obige Funktion so zu ändern, dass genau derselbe Typ der Eingabespalte zurückgegeben wird?
DISTINCT ON
funktioniert dies in diesem Fall nicht. Es ist keine Aggregatfunktion, Sie filtern die Daten tatsächlich und können sie nur einmal ausführen.