From: | Stephen Amell <StephenAmell(at)inbox(dot)lv> |
---|---|
To: | Hellmuth Vargas <hivs77(at)gmail(dot)com> |
Cc: | Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Consulta sobre rangos no contiguos |
Date: | 2017-06-23 17:13:10 |
Message-ID: | 3f05e2cf-8966-8065-6f30-7a0fa3f575eb@inbox.lv |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Mil gracias Hellmuth!
Lo estoy probando y va muy bien.
Admito que el -lag y el except me hicieron ir a leer la documentación!
Muchas gracias!
On 2017-06-23 11:13, Hellmuth Vargas wrote:
> 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
> <mailto: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ónde 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
>
From | Date | Subject | |
---|---|---|---|
Next Message | Stephen Amell | 2017-06-23 19:21:14 | Re: Consulta sobre rangos no contiguos |
Previous Message | Alvaro Herrera | 2017-06-23 17:11:11 | Re: Consulta sobre rangos no contiguos |