Re: Consulta sobre rangos no contiguos

From: Hellmuth Vargas <hivs77(at)gmail(dot)com>
To: Stephen Amell <StephenAmell(at)inbox(dot)lv>
Cc: Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta sobre rangos no contiguos
Date: 2017-06-23 14:13:59
Message-ID: CAN3Qy4pCwCFGhokEEoBLD2XcfSOfz_Uaopoj-EvMNM7jEWVPYA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Lista

Aunque no es puramente operaciones con rangos plateo esta solución:

select tsrange(min(dato),max(dato))
from (
select *,sum(rangos) over(order by dato asc) as grupo
from (
select *,case when dato -lag(dato) over(order by dato asc)<>'30
minutes'::interval then 1 else 0 end as rangos
from (
select * from generate_series(lower('[2015-11-27 09:30:00,2015-11-27
18:00:00)'::tsrange),upper('[2015-11-27 09:30:00,2015-11-27
18:00:00)'::tsrange),'30 minutes'::interval) as a(dato)
except
select * from generate_series(lower('[2015-11-27 10:30:00,2015-11-27
11:00:00)'::tsrange),upper('[2015-11-27 10:30:00,2015-11-27
11:00:00)'::tsrange),'30 minutes'::interval) as a(dato)
) as i order by dato asc
) as i
) as j group by grupo

test#;
tsrange
-----------------------------------------------
["2015-11-27 11:30:00","2015-11-27 18:00:00")
["2015-11-27 09:30:00","2015-11-27 10:00:00")
(2 rows)

El 23 de junio de 2017, 08:12, Stephen Amell<StephenAmell(at)inbox(dot)lv>
escribió:

> Buenos días comunidad postgresista!
>
> Hoy les escribo para consultarles a ver si me dan una idea sobre como
> encarar un problema de rangos timestamp
>
> Dado un rango de atención: '["2015-11-27 09:30:00","2015-11-27
> 18:00:00")'::tsrange
> Dado un rango de la duración de la atención: '["2015-11-27
> 10:30:00","2015-11-27 11:00:00")'::tsrange
>
> Necesito obtener el rango de atención libre, que serian dos rangos
> cortados por el medio.
>
> Lo primero que probé es ver si funcionaba con un:
>
> select '["2015-11-27 09:30:00","2015-11-27 18:00:00")'::tsrange -
> '["2015-11-27 10:30:00","2015-11-27 11:00:00")'::tsrange
>
> ERROR: el resultado de la diferencia de rangos no sería contiguo
> SQL state: 22000
>
> Ahí empece a googlear y me encuentro que no es posible por limitaciones
> propias de postgres y quería saber si alguien me puede orientar con algún
> workaround o algo.
>
>
> Desde ya muchísimas gracias!
> Diego
>

--
Cordialmente,

Ing. Hellmuth I. Vargas S.
Esp. Telemática y Negocios por Internet
Oracle Database 10g Administrator Certified Associate
EnterpriseDB Certified PostgreSQL 9.3 Associate

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2017-06-23 17:11:11 Re: Consulta sobre rangos no contiguos
Previous Message Stephen Amell 2017-06-23 13:12:26 Consulta sobre rangos no contiguos