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<stephenam...@inbox.lv <mailto:stephenam...@inbox.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


Responder a