PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Função agregada do PostgreSQL ao longo do intervalo


Há duas modificações em sua tentativa. Primeiro, acho que você não pode usar um operador como SFUNC, então você precisa definir uma função nomeada para fazer a interseção e usá-la.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
   returns tsrange language plpgsql as 
      'begin return a * b; end';

Em segundo lugar, o valor padrão para um intervalo é o intervalo vazio -- portanto, a interseção sempre estará vazia. Você precisa inicializar o intervalo para um intervalo infinito '[,]' para iniciar o agregado. A definição agregada então se parece com:
CREATE AGGREGATE intersection ( tsrange ) (
    SFUNC = int_tsrange,
    STYPE = tsrange,
    INITCOND = '[,]'
);