我有2列时间戳:
START
(例如2015-11-18 10:00)STOP
(例如2015-11-18 22:00)我还有日历(事件,忙),它有3列:
What
(varchar(50))(例如,喝咖啡休息时间)START
(时间戳)(例如2015-11-18 10:55)STOP
(时间戳)(例如2015-11-18 11:55)如何将所有空闲时段作为单个时间戳返回 即
free time1: 2015-11-18 10:00 - 2015-11-18 10:55
free time2: 2015-11-18 11:55 - 2015-11-18 22:00
作为单个postgresql查询?
答案 0 :(得分:1)
也许你只想要not exists
:
select ts.*
from timestamps ts
where not exists (select 1
from calendar c
where ts.start <= c.end and
ts.end >= c.start
);
您可能需要将不等式调整为严格的不等式,具体取决于您如何定义重叠。注意:您也可以使用overlaps
关键字,但我永远不会记住它是否包含端点,这就是我明确写出逻辑的原因。