คำถามแบบเต็มเขียนใหม่
ฉันกำลังมองหาฟังก์ชันการรวมครั้งแรก ()
ที่นี่ฉันพบบางสิ่งที่เกือบจะได้ผล:
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 anyelement ฉันได้รับข้อผิดพลาดดังต่อไปนี้
ข้อผิดพลาด: โครงสร้างของแบบสอบถามไม่ตรงกับประเภทผลลัพธ์ของฟังก์ชัน Estado de SQL: 42804 Detalhe: อักขระประเภทที่ส่งคืนไม่ตรงกับอักขระประเภทที่คาดว่าจะแปรเปลี่ยน (40) ในคอลัมน์ 2 บริบท: PL / pgSQL ฟังก์ชัน vsr_table_at_time (anyelement, timestamp ) บรรทัดที่ 31 ที่ RETURN QUERY
ในหน้า wiki เดียวกันมีลิงค์ไปยังC Version ของฟังก์ชันที่จะแทนที่ข้างต้น ฉันไม่รู้วิธีติดตั้ง แต่ฉันสงสัยว่าเวอร์ชันนี้สามารถแก้ปัญหาของฉันได้หรือไม่
ในขณะเดียวกันมีวิธีที่ฉันสามารถเปลี่ยนฟังก์ชั่นดังกล่าวข้างต้นเพื่อให้ผลตอบแทนที่แน่นอนประเภทเดียวกันของคอลัมน์อินพุต?
DISTINCT ON
จะไม่ทำงานในกรณีนี้ มันไม่ใช่ฟังก์ชั่นรวมคุณกำลังทำการกรองข้อมูลจริงๆและคุณสามารถทำได้เพียงครั้งเดียวเท่านั้น