PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Funzione di aggregazione di PostgreSQL nell'intervallo

Ci sono due modifiche al tuo tentativo. Innanzitutto, non penso che tu possa usare un operatore come SFUNC, quindi devi definire una funzione denominata per eseguire l'intersezione e usarla.

CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
   returns tsrange language plpgsql as 
      'begin return a * b; end';

In secondo luogo, il valore predefinito per un intervallo è l'intervallo vuoto, quindi l'intersezione sarà sempre vuota. Devi inizializzare l'intervallo su un intervallo infinito '[,]' per iniziare l'aggregato. La definizione aggregata sarà quindi simile a:

CREATE AGGREGATE intersection ( tsrange ) (
    SFUNC = int_tsrange,
    STYPE = tsrange,
    INITCOND = '[,]'
);