पूरा सवाल फिर से लिखना
मैं पहले () एग्रीगेट फंक्शन की तलाश में हूं।
यहाँ मुझे कुछ ऐसा मिला जो लगभग काम करता है:
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) कॉलम पहले () फ़ंक्शन से गुजरता है, तो इसे सरल varchar (एक आकार के बिना) में बदल दिया जाता है। किसी फ़ंक्शन को RETURNS SETOF एनीमेलमेंट के रूप में क्वेरी वापस करने की कोशिश कर रहा है, मुझे निम्नलिखित त्रुटि मिलती है:
त्रुटि: क्वेरी की संरचना फ़ंक्शन परिणाम प्रकार से मेल नहीं खाती है एस्टाडो डी एसक्यूएल: 42804 Detalhe: लौटा हुआ प्रकार चरित्र भिन्नता कॉलम में अपेक्षित प्रकार वर्ण भिन्नता (40) से मेल नहीं खाती है। संदर्भ: PL / pgSQL फ़ंक्शनrr_table_at_time (किसी भी समय के बिना टाइमस्टैम्प) ) RETURN QUERY पर लाइन 31
उसी विकी पृष्ठ में फ़ंक्शन के C संस्करण का लिंक होता है जो ऊपर की जगह लेगा। मुझे नहीं पता कि इसे कैसे स्थापित किया जाए, लेकिन मुझे आश्चर्य है कि अगर यह संस्करण मेरी समस्या को हल कर सकता है।
इस बीच, वहाँ एक तरीका है जिससे मैं उपरोक्त फ़ंक्शन को बदल सकता हूं ताकि यह उसी प्रकार के इनपुट कॉलम को वापस कर दे?
DISTINCT ON
तो इस मामले में काम नहीं करेंगे। यह एक समग्र कार्य नहीं है, आप वास्तव में डेटा को फ़िल्टर कर रहे हैं और इसलिए आप इसे केवल एक बार ही कर सकते हैं।